У меня есть два файла:
a.csv
12,34,56
11,23,67
b.csv
12,34,98
11,23,43
Я хочу объединить их в final.csv :
12,34,56,98
11,23,67,43
и размер файла 10gb
Я использовал csvtool, но он не работает, когда размер файла слишком большой
Скрипт 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
Чтобы отправить данные в новый файл, используйте команду перенаправления оболочки > следующим образом:
./merge_files.pl a.txt b.txt > final.txt