合并许多大型CSV文件(在Linux中)

3
我有大约500个CSV文件,每个文件有5000行和1000列(约20Mb)。我想将它们按列合并并保存为一个大的CSV文件。
之前的帖子部分回答了这个问题。 使用awk逐列合并多个csv文件,不匹配 但是是否有一种方法可以在不必写出每个文件名的情况下完成此操作?如果我的文件按顺序命名(例如,X1.csv,X2.csv,X3.csv,...,X500.csv),那么这有助于吗?
3个回答

5
举个例子,假设有三个这样的文件:
$ 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
你刚刚教给我的真是太棒了,我经常需要合并大型日志文件,这对我来说简直就是宝藏! - Saif Asif

2

0

使用以下shell脚本,您可以重复缩小文件名:

#!/bin/sh

a=500

while [ $a -gt 500 ]
do
   paste -d' ' Xtemp X$a > Xtemp
   a=`expr $a + 1`
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接