Preciso mesclar vários arquivos .CSV (usando o cat
comando), mas sem copiar o cabeçalho de cada arquivo.
Qual é a melhor maneira de realizar essa tarefa?
Você precisará de mais do que o cat
comando, conforme descrito aqui :
Digamos que você tenha 3 CSV-arquivos: file1.csv
, file2.csv
e, file3.csv
e quer se juntar a eles para bigfile.csv
e seu cabeçalho é sempre (apenas) a primeira linha, em seguida, uso
(mantenha o cabeçalho do primeiro arquivo "file1.csv"):
cat file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
ou (remova o cabeçalho de todos os arquivos cujos nomes começam com "arquivo"):
awk 'FNR > 1' file*.csv > bigfile.csv
cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
tail -n+2
,tail +2
não iria funcionarConcordo com a resposta principal, mas sugiro estendê-la com o seguinte cenário (como não posso comentar):
Se você deseja que o arquivo de saída contenha cabeçalho (uma vez), o script correto é:
awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv
FNR representa o número do registro processado em um único arquivo. E a NR a representa globalmente, então a primeira linha é aceita e o restante é ignorado como antes.
fonte
Você também pode usar um comando de grupo (
{ ; }
) em vez de substituição de processo (<()
):Também funciona com terminações de linhas CRLF desde que os arquivos terminem com uma linha vazia (
\r\n
).As versões somente em número de cabeça e cauda foram tornadas obsoletas pelo POSIX 1003.1-2001 e resultam em avisos em alguns ambientes.
fonte
Necessário concatenar dois CSVs grandes com colunas idênticas em CSV maior para script de chunking (os dados não possuem IDs exclusivos).
Primeiro tirou o cabeçalho do segundo csv
Em seguida, concatenado através dos seguintes
fonte
O uso da sequência de comandos acima resultou em um arquivo parecido com este:
Para torná-lo um CSV adequado, com uma linha de cabeçalho e todos os valores relevantes, empreguei o seguinte
sed
encantamento ...sed -ie "/^$/d;/^==>/d" bigfile.csv
fonte
Solução mais fácil se você tiver uma tonelada de arquivos:
Volte para editar o arquivo grande e adicione o cabeçalho novamente.
fonte
awk 'FNR > 1' file*.csv > bigfile.csv
? Não é!file