Reduzir linhas com base em uma chave em um arquivo csv usando awk ou perl

0

Arquivo csv de entrada:

key,c1,c2,c3......,cn
1,car,phone,cat,.....,kite
2,abc,def,hij,.......,pot
1,yes,no,is,.........,hello
2,hello,yes,no,......,help

Arquivo csv de saída:

Key,c1,c2,c3,.......,cn
1,caryes,phoneno,catis,.....,kitehello
2,abchello,defyes,hijno,....,pothelp

O arquivo de entrada tem 14 milhões de linhas. Alguém pode ajudar com uma maneira eficiente de fazer isso? Agradecemos antecipadamente.

    
por Meghana M 16.05.2018 / 21:20

1 resposta

0

Eu não sei quão eficiente será, mas você poderia fazer algo assim com um hash de matrizes anônimas, usando um map para aplicar a atribuição de concatenação de strings .= a cada elemento de cada valor de hash:

perl -F, -nle '
  $k = shift @F;
  map { $h{$k}[$_] .= $F[$_] } 0..$#F 
  }{ 
  for $k (sort { $a <=> $b } keys %h) {
    print join ",", $k, @{ $h{$k} }
  }' file
key,c1,c2,c3......,cn
1,caryes,phoneno,catis,..............,kitehello
2,abchello,defyes,hijno,.............,pothelp
    
por 17.05.2018 / 00:23

Tags