我一直在使用cat来组合一堆csv文件,然后在导入MySQL之前使用sort来删除dupes。像处理大量的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
这里最值得赞赏的是任何帮助。我将不得不再次浏览所有这些文件,所以这次我需要把它弄好。
如果需要澄清,请告诉我。我正在使用linux上的生产的mac上运行,理想情况下喜欢使用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
答案 0 :(得分:1)
默认情况下,只要有一个输入文件,tail
就会输出一个带有关联文件名的标题。要取消此功能,请使用-q
:
-q, --quite, --silent
never output headers giving file names
您的命令行应如下所示:
tail -q -n +2 *.csv > combined.csv