使用 cat 或其他方法合并 CSV

使用 cat 或其他方法合并 CSV

我有来自不同目录且具有相同文件名的 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

相关内容