КАК объединить строки с awk в одну строку с тем же ключом - PullRequest
2 голосов
/ 27 марта 2019

У меня есть следующий файл

 lion : catty : mouse
 lion : cat   : bear
 rubber: ham  : cheese

Я хотел бы объединить каждую строку с ключом (= первое поле) в

lion : catty : mouse ; cat : bear
rubber: ham : cheese

Я сделал это с помощью awk таким образом,но это не работает.

  #!/usr/bin/awk -f
  BEGIN {FS=":"} 
  a[$1]=a[$1] ";" $2 " : " $3
  END{
  for (x in a) print x,a[x]}

Я был бы благодарен, если бы какой-нибудь awk jack мог сказать мне, что я делаю неправильно.спасибо

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

Это может быть то, что вы ищете:

$ awk -F' *: *' -v OFS=' : ' '{a[$1] = ($1 in a ? a[$1] " ; " : "") $2 OFS $3} END{for (key in a) print key, a[key]}' file
rubber : ham : cheese
lion : catty : mouse ; cat : bear
2 голосов
/ 27 марта 2019

Попробуйте:

$ awk -F: '{a[$1]=a[$1] (a[$1]?";":":") $2":" $3} END{for (x in a) print x,a[x]}' file
  lion  : catty : mouse; cat   : bear
  rubber : ham  : cheese

Если вы хотите более хороший вывод, попробуйте:

$ awk -F: '{a[$1]=a[$1] (a[$1]?" ; ":" : ") $2" : " $3} END{for (x in a) print x,a[x]}' file | column -t
lion    :  catty  :  mouse   ;  cat  :  bear
rubber  :  ham    :  cheese
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...