我有来自不同目录且具有相同文件名的 CSV,我想将它们合并在一起并将它们放入同一文件名下的新目录中,然后循环遍历源文件夹。
两个来源的 CSV 具有相同的结构。
我一直在寻找一个好的解决方案,但我的 unix/bash 技能还没有像我希望的那样熟练完成这项任务。
**Example**
Source1/1.csv
Source2/1.csv
Output/1.csv
答案1
通常情况下,CSV 文件看起来像这样:
file1.csv
:
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
现在,如果我们有第二个具有兼容格式和尺寸(相同的列分隔符,此处,
- 以及相同的列数,此处为 5)的 CSV 文件,并且没有包含每列标题的标题行,如下例所示:
file2.csv
:
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
然后我们可以简单地连接这两个文件而不需要任何转换:
cat file1.csv file2.csv > output.csv
结果如下:
output.csv
:
a1,b1,c1,d1,e1
a2,b2,c2,d2,e2
a3,b3,c3,d3,e3
a4,b4,c4,d4,e4
a5,b5,c5,d5,e5
要自动将 中的所有文件source1/
与 中同名的文件合并source2/
(假设只有 CSV 文件,并且 中的所有文件source1/
也必须存在于 中source2/
),并将结果存储在output/
相同的文件名中,以下 Bash 单行命令将完成此工作:
for f in source1/* ; do fname="$(basename -- "$f")" ; cat -- "source1/$fname" "source2/$fname" > "output/$fname" ; done