使用 cat 或 tail 组合 CSV 文件时忽略行?

Ignoring lines when combining CSV files using cat or tail?

在导入 MySQL 之前,我一直在使用 cat 合并一堆 csv 文件,然后使用 sort 删除重复文件。与处理大量 csv 文件一样肮脏,但在我发现我的一些数据没有进入数据库之前,它可能一帆风顺。

我发现,在合并文件的过程中,在某些情况下,列名称(csv 文件的第一行)被扔到其他列中。结果是,当我使用 sort 删除重复项并吐出一个新文件时,它只输出直到列名出现问题的那一行被扔到 csv 文件中新的未使用列中。

我正在像下面这样使用猫:

  cat *.csv >combined.csv

并排序为

  sort -u combined.csv -o cleaned.csv

然后我走向了有前途的尾巴:

tail -n+2 *.csv >combined.csv

然而,根据我使用 tail 的方式,我在合并每个 csv 文件之前的行中获取了实际文件名

==> first-file.csv <==
red     | 1234
yellow  | 5678 
blue    | 9123
green   | 4567
orange  | 8901
black   | 2345
white   | 6789
==> second-file.csv <==
brown   | 1234
gray    | 5678 
tan     | 9123
burgundy| 4567

而不是:

red     | 1234
yellow  | 5678 
blue    | 9123
green   | 4567
orange  | 8901
black   | 2345
white   | 6789
brown   | 1234
gray    | 5678 
tan     | 9123
burgundy| 4567

如有任何帮助,我们将不胜感激。我将不得不再次检查所有这些文件,所以这次我需要做对。

如果需要澄清,请告诉我。我 运行 正在 mac 上 linux 生产,理想情况下我想用 cat、sort、tail 或类似的东西来完成这个。

编辑: 要使用通用数据重现问题,只需将以下数据保存在两个单独文件中的 csv 文件中。我将它们命名为 test-1.csv 和 test-2.csv。

color, votes, trend
"red", "1234", "1,3,3,4"
"yellow", "5678", "2,3,3,4"
"blue", "9123", "2,3,3,4"
"green", "4567", "5,3,3,4"
"orange", "8901", "2,2,3,4"
"black", "2345", "2,1,3,4"
"white", "6789", "2,5,3,4"
"brown", "1234", "2,7,3,4"
"gray", "5678", "8,2,3,4"
"tan", "9123", "9,3,3,4"
"burgundy", "4567", "2,5,1,4" 

然后 运行:

tail -q -n +2 *.csv > combined.csv

默认情况下,只要有多个输入文件,tail 就会输出一个带有关联文件名的 header。要放弃此功能,请使用 -q:

-q, --quite, --silent
    never output headers giving file names

您的命令行应如下所示:

tail -q -n +2 *.csv > combined.csv