Os mesmos resultados também podem ser obtidos com comandos bash.
paste a.csv b.csv |awk -F",||\t" '{print ","","","}'
O código fornece a seguinte saída:
12,34,56,98
11,23,67,43
Eu tenho dois arquivos:
a.csv
12,34,56
11,23,67
b.csv
12,34,98
11,23,43
Eu quero mesclá-los no final.csv:
12,34,56,98
11,23,67,43
e o tamanho do arquivo é 10gb
Eu usei csvtool
, mas não funciona quando o tamanho do arquivo é muito grande
Os mesmos resultados também podem ser obtidos com comandos bash.
paste a.csv b.csv |awk -F",||\t" '{print ","","","}'
O código fornece a seguinte saída:
12,34,56,98
11,23,67,43
O script perl abaixo lê os dois arquivos simultaneamente e une cada linha do arquivo a.csv
ao último item em b.csv
. Os arquivos são fornecidos como argumentos na linha de comando. A ordem dos arquivos é importante.
#!/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]);
}
Execução de teste:
$ 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
Para enviar dados para um novo arquivo, use o operador de redirecionamento do shell >
da seguinte forma:
./merge_files.pl a.txt b.txt > final.txt