合并 2 个 csv 文件

合并 2 个 csv 文件

我有两个文件:

存档文件

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

相关内容