【发布时间】:2022-01-16 02:21:53
【问题描述】:
我想知道在任何程序(awk/perl/python)中将 csv 文件(比如 10k 列)拆分为多个小文件的快速/有效方式,每个小文件包含 2 列。我会在 unix 机器上执行此操作。
#contents of large_file.csv
1,2,3,4,5,6,7,8
a,b,c,d,e,f,g,h
q,w,e,r,t,y,u,i
a,s,d,f,g,h,j,k
z,x,c,v,b,n,m,z
我现在想要多个这样的文件:
# contents of 1.csv
1,2
a,b
q,w
a,s
z,x
# contents of 2.csv
1,3
a,c
q,e
a,d
z,c
# contents of 3.csv
1,4
a,d
q,r
a,f
z,v
and so on...
我目前可以在小文件(比如 30 列)上使用 awk 执行此操作,如下所示:
awk -F, 'BEGIN{OFS=",";} {for (i=1; i < NF; i++) print $1, $(i+1) > i ".csv"}' large_file.csv
以上对于大文件需要很长时间,我想知道是否有更快、更有效的方法来做同样的事情。
提前致谢。
【问题讨论】:
-
所以您需要编写大约 10,000 个文件?原始 CSV 文件中有多少行?
-
你必须看看你的操作系统是否可以处理那么多打开的文件句柄。
-
@G4143 虽然这对于解决方案很重要,但不必同时打开它们
标签: perl awk data-manipulation