CSV: свяжите больше данных строки

У меня есть это file1.csv:

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

Мне нужны к слиянию подобные строки (es. A и C):

A,dog cat horse cow deer goat 
B,goat deer fish
C,dog cat goat
3
задан 1 March 2018 в 16:58

2 ответа

С 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

С GNU datamash + 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

Обратите внимание, что выходной порядок не гарантируется в awk версии: если у Вас есть GNU awk> = 4.0, можно управлять тем использованием PROCINFO структура.

5
ответ дан 1 December 2019 в 15:21

Вы можете также сначала sort и затем процесс с 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
1
ответ дан 1 December 2019 в 15:21

Другие вопросы по тегам:

Похожие вопросы: