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
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
состав.
Вы также можете сначала 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