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

Merge many large CSV files (in Linux)

我有大约 500 个 CSV 文件,每个文件有 5000 行和 1000 列 (~20Mb)。我想按列附加它们并保存为一个大的 CSV 文件。

之前的 post 部分回答了这个问题。 Merge multiple csv files awk column-wise, no match

但是有没有办法不用写出每个文件名就可以做到这一点?我的文件按顺序命名(例如,X1.csv、X2.csv、X3.csv、...、X500.csv),如果有帮助的话。

举个例子,假设有三个这样的文件:

$ 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

使用下面的shell脚本你可以缩小重复命名的文件,

#!/bin/sh

a=500

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

您可以使用 Nysol 的 mcmd。只需一行命令:

mcat i=X*.csv o=output.csv

http://www.nysol.sakura.ne.jp/mcmd2/en/sect-mcat.html