使用 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
在导入 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