Concatenação eficiente simples de arquivos CSV [duplicados]

0

Considere um grande número de arquivos CSV ( *.csv ) vivendo em alguma pasta. Todos eles têm o mesmo cabeçalho exato.

Como posso concatenar todos eles de maneira eficiente em um único arquivo CSV com o mesmo cabeçalho único?

Encontrei várias soluções que resolvem problemas semelhantes, mas mais específicos.

A solução atual awk não funciona.

$ cat concat_my_csv_files.sh
    #!/usr/bin/env zsh
    awk '
        FNR==1 && NR!=1 { while (/^<header>/) getline; }
        1 {print}
    ' $1/*.csv > $2

$ ./concat_my_csv_files /some/path/to/csv/files/ full_join.csv

quando faço:

grep -F column_A full_join.csv

Eu vejo várias linhas com ele.

    
por Amelio Vazquez-Reina 05.10.2015 / 22:25

2 respostas

3
awk '
    NR == 1 {print}
    FNR == 1 {next}
    {print}
' *.csv

A variável NR é o número de registro de todas as entradas.
A variável FNR é o número de registro apenas do arquivo atual.

Isto imprime a primeira linha vista pelo awk (o cabeçalho do primeiro arquivo), então irá pular a primeira linha de cada arquivo, imprimindo todas as outras linhas.

    
por 05.10.2015 / 22:52
3

Basicamente você quer "head -n 1 firstorany.csv; tail -n +2 * .csv".

set -- *.csv
head -n 1 "$1"
tail -n +2 "$@"

Se você tiver * .csv como argumentos em um script sh, omita a primeira linha.

    
por 05.10.2015 / 22:51