例如,我有两个 csv 文件,0.csv
100a,a,b,c,c
200a,b,c,c,c
300a,c,d,c,c
和 1.csv
100a,Emma,Thomas
200a,Alex,Jason
400a,Sanjay,Gupta
500a,Nisha,Singh
我希望输出像
100a,a,b,c,c,Emma,Thomas
200a,b,c,c,c,Alex,Jason
300a,c,d,c,c,0,0
400a,0,0,0,0,Sanjay,Gupta
500a,0,0,0,0,Nisha,Singh
我如何在 Unix shell 脚本或 Perl 中做到这一点?我知道unix“加入”命令,它适用于小文件。例如,为了得到我的结果,我可以这样做
join -t , -a 1 -a 2 -1 1 -2 1 -o 0 1.2 1.3 1.4 1.5 2.2 2.3 -e "0" 0.csv 1.csv
但这对我的目的来说是不可行的,因为我的实际数据文件有超过一百万列(总数据大小以千兆字节为单位),因此我的 unix 命令也将超过一百万个字符长。这可能是最令人头疼的问题,因为低效的代码很快就会陷入困境。
另请注意,只要缺少数据,我就需要占位符“0”。这使我无法简单地使用它
join -t , -a 1 -a 2 -1 1 -2 1 0.csv 1.csv
也是初学者 Perl 程序员,所以一些细节真的很受欢迎。我更喜欢 perl 或 shell 脚本的解决方案,但实际上任何可行的方法都可以。