如何将具有awk的行合并到具有相同键的一行

时间:2019-03-27 18:59:56

标签: awk

我有以下文件

 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 个答案:

答案 0 :(得分:3)

这可能是您想要的:

$ 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

答案 1 :(得分:2)

尝试:

$ 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