Mesclando 2 arquivos csv

3

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

    
por Gaurav Singh 08.02.2017 / 08:58

2 respostas

2

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
    
por arupgsh 08.02.2017 / 10:37
3

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
    
por Sergiy Kolodyazhnyy 08.02.2017 / 09:57