CSV 文件的简单有效串联

CSV 文件的简单有效串联

*.csv考虑某个文件夹中存在大量 CSV 文件 ( )。它们都有完全相同的标头。

如何有效地将它们全部连接到具有相同标头的单个 CSV 文件中?


我找到了许多解决类似但更具体的问题的解决方案。


当前的awk解决方案不起作用。

$ 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

当我做:

grep -F column_A full_join.csv

我看到好几行都有它。

答案1

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

NR变量是所有输入的记录数。
FNR变量仅是当前文件的记录号。

这将打印 awk 看到的第一行(第一个文件的标题),然后将跳过每个文件的第一行,打印所有其他行。

答案2

基本上你想要“head -n 1 firstorany.csv; tail -n +2 *.csv”。

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

如果 sh 脚本中使用 *.csv 作为参数,请省略第一行。

相关内容