Como mesclar vários arquivos do mesmo formato em um único arquivo? [duplicado]

0

Eu tenho muitos arquivos do seguinte formato (todos eles contêm cabeçalhos e têm o mesmo número de colunas):

col1,col2,tt2,mm3
123,292810,1501223371-7504710,yes
1234,286130,1501223549-101722650,yes
334,276300,1501223650-71196600,yes
445,290100,1501224239-87923810,yes

O número de linhas em cada arquivo é diferente, mas é sempre pequeno (em torno de 20 a 40 linhas). Todos os arquivos estão localizados no mesmo diretório.

Eu quero mesclar todos esses vários arquivos em um único arquivo sem repetir os cabeçalhos. Como posso fazer isso usando o script bash?

    
por Dinosaurius 31.07.2017 / 12:56

3 respostas

2

Você pode usar awk para concatenar os arquivos, ignorando a primeira linha de cada arquivo, a menos que seja a primeira linha de todos os arquivos.

Por exemplo, se os arquivos tiverem o nome part-00000 a part-00199 , então

awk 'FNR==1 && NR!=1 {next} {print}' part-{00000..00199}
    
por steeldriver 31.07.2017 / 13:04
2

Eu pegava os cabeçalhos de um dos arquivos e pegava tudo da linha 2 de todos os arquivos.

head -1 part-00000 > output.csv
tail -n +2 part-* >> output.csv
    
por Oli 31.07.2017 / 13:07
1

Uma alternativa simples para outras soluções é usar cat e grep como:

cat * | grep -v '^col1,col2' > newfile
    
por Ravexina 31.07.2017 / 13:11