CSV: concatena mais dados de linha

3

Eu tenho esse file1.csv :

A,dog cat horse cow
B,goat deer fish
A,deer goat 
C,dog cat 
C,goat

Eu preciso juntar as linhas semelhantes (es. A e C):

A,dog cat horse cow deer goat 
B,goat deer fish
C,dog cat goat
    
por marco ced 01.03.2018 / 14:57

2 respostas

5

com awk :

$ awk -F, '{a[$1] = a[$1]=="" ? $2 : a[$1] OFS $2} END {for (i in a) printf("%s,%s\n", i, a[i])}' file.csv
A,dog cat horse cow deer goat
B,goat deer fish
C,dog cat  goat

Com o% GNUdatamash + sed :

$ datamash -st, groupby 1 collapse 2 < file.csv | sed 's/,/ /2g'
A,dog cat horse cow deer goat
B,goat deer fish
C,dog cat  goat

Note que a ordem de saída não é garantida na versão awk: se você tem o GNU awk > = 4.0, você pode controlar isso usando a estrutura PROCINFO .

    
por steeldriver 01.03.2018 / 15:13
1

Você também pode primeiro sort e processar com awk :

$ <file1.csv sort -sk1,1.1|awk -F, '{printf(a==$1)?" "$2:(NR<2)?$0:"\n"$0;a=$1}END{print""}'
A,dog cat horse cow deer goat
B,goat deer fish
C,dog cat goat
    
por dessert 01.03.2018 / 15:52