Respostas:
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
tail -n+2
, tail +2
não iria funcionar
Concordo 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.
Você também pode usar um comando de grupo ( { ; }
) em vez de substituição de processo ( <()
):
{ head -n1 file1.csv; for f in file*.csv; do tail -n+2 "$f"; done; } > new.csv
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.
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
awk 'FNR > 1' file2.csv > file2_noheading.csv
Em seguida, concatenado através dos seguintes
cat file1.csv file2_noheading.csv > newfile.csv
O uso da sequência de comandos acima resultou em um arquivo parecido com este:
header,of,csv1
contents,of,csv1
==> csv2.csv
contents,of,csv2
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
Solução mais fácil se você tiver uma tonelada de arquivos:
awk 'FNR > 1' *.csv > merged.csv
Volte para editar o arquivo grande e adicione o cabeçalho novamente.
awk 'FNR > 1' file*.csv > bigfile.csv
? Não é!
file
cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv