Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何通过添加列来合并.CSV文件_Linux_Bash_Shell - Fatal编程技术网

Linux 如何通过添加列来合并.CSV文件

Linux 如何通过添加列来合并.CSV文件,linux,bash,shell,Linux,Bash,Shell,有一个包含许多.CSV的目录,我想将其合并到一个矩阵中,并将文件名作为附加头添加到第一行 .CSV file A: header 1, header 2 value 1, value 2 .CSV file B: header 3, header 4, value 3, value 4 Merged .CSV: filename A, filename A, filename B, filename B header 1, header 2, header 3, header 4,

有一个包含许多.CSV的目录,我想将其合并到一个矩阵中,并将文件名作为附加头添加到第一行

.CSV file A:

header 1, header 2
value 1, value 2


.CSV file B:

header 3, header 4,
value 3, value 4


Merged .CSV:

filename A, filename A, filename B, filename B
header 1, header 2, header 3, header 4,
value 1, value 2, value 3, value 4
你知道我该怎么做吗

提前谢谢

我想我必须更详细地解释

.CSV文件不相同。这意味着所有列的数量相同,但行的数量可能不同

A.csv
H1,H2
1,2
3,4

B.csv
H1,H2
5,6

MERGED.csv
A,A,B,B
H1,H2,H1,H2
1,2,5,6
3,4,,

如果您只需要合并文件,该命令可以非常简单

paste -d , A B
合并后的结果将是

header 1,header 2,header 3,header 4
value 1,value 2,value 3,value 4
由于您现在还想将文件名作为附加头插入,因此输入文件需要额外准备。这是我的解决办法

prepareCsvFile() {
    sed "1p" "$1" | sed "1s/[^,]*/filename $1/g"
}
paste -d , <(prepareCsvFile A) <(prepareCsvFile B)
prepareCsvFile(){
sed“1p”“$1”| sed“1s/[^,]*/filename$1/g”
}

粘贴-d,您将其标记为bash问题。您需要使用bash有什么原因吗?这对于python或R来说非常简单。想要在我的NAS上运行,bash在我看来是最简单的方法。用Python怎么做?谢谢<代码>粘贴-d,A B
在标题2和值2之后添加换行符。有没有办法避免这种情况?我无法重现你的问题。你的shell版本是什么?我试过我的
GNUBash,5.1.4(1)版发行版(x86_64-apple-darwin20.2.0)
GNUBash,5.0.3(1)版发行版(arm未知linux gnueabihf)
,没有看到用粘贴换行。