我有~500个CSV文件,每个文件有5000行和1000列(~20Mb)。我想按列添加它们并保存为大型CSV文件。
之前的帖子部分回答了这个问题。 Merge multiple csv files awk column-wise, no match
但有没有办法在不写出每个文件名的情况下做到这一点?我的文件是顺序名称(例如,X1.csv,X2.csv,X3.csv,...,X500.csv),如果这有帮助的话。
答案 0 :(得分:4)
举个例子,假设有三个这样的文件:
$ cat X1.csv
A,B
A,B
A,B
$ cat X2.csv
C
C
C
$ cat X3.csv
D
D
D
我们希望以逗号分隔的格式逐行合并它们,而不是命名每个文件:
$ paste -d, X{1..3}.csv
A,B,C,D
A,B,C,D
A,B,C,D
-d,
告诉paste
在合并文件时使用逗号作为分隔符。在bash
下,表达式X{1..3}.csv
按数字顺序扩展为文件序列。
如果你有500个这样的文件,那么命令就是:
paste -d, X{1..500}.csv
将输出保存到文件:
paste -d, X{1..500}.csv >merged.csv
答案 1 :(得分:2)
答案 2 :(得分:0)
使用以下shell脚本,您可以重复缩小命名文件,
#!/bin/sh
a=500
while [ $a -gt 500 ]
do
paste -d' ' Xtemp X$a > Xtemp
a=`expr $a + 1`
done