我有两个文件:
存档文件
12,34,56
11,23,67
上传时间: 2018-07-27
12,34,98
11,23,43
我想将它们合并到 final.csv 中:
12,34,56,98
11,23,67,43
文件大小为 10gb
我用过csvtool
,但文件太大时不起作用
答案1
下面的 perl 脚本同时读取两个文件,并将文件中的每一行a.csv
与最后一个项目连接起来b.csv
。文件在命令行中作为参数给出。文件的顺序很重要。
#!/usr/bin/env perl
use strict;
use warnings;
open(my $fh1,'<',$ARGV[0]) or die $!;
open(my $fh2,'<',$ARGV[1]) or die $!;
while( not eof($fh1) and not eof($fh2)){
my $line1 = <$fh1>;
my $line2 = <$fh2>;
chomp $line1;
chomp $line2;
my @words2 = split(",",$line2);
printf("%s,%s\n",$line1,$words2[-1]);
}
测试运行:
$ cat a.txt
12,34,56
11,23,67
$ cat b.txt
12,34,98
11,23,43
$ ./merge_files.pl a.txt b.txt
12,34,56,98
11,23,67,43
要将数据发送到新文件,请使用 shell 的重定向运算符,>
如下所示:
./merge_files.pl a.txt b.txt > final.txt
答案2
使用 bash 命令也可以获得相同的结果。
paste a.csv b.csv |awk -F",||\t" '{print $1","$2","$3","$6}'
该代码给出以下输出:
12,34,56,98
11,23,67,43