【问题标题】:Shell - Concatenate rows in Column1 If Column 2 has duplicatesShell - 如果第 2 列有重复,则连接第 1 列中的行
【发布时间】:2018-02-08 15:48:43
【问题描述】:

我是 shell 编程的新手,目前在找到解决方案时遇到了障碍,

如果列 B 相同,我想连接列 A 的值。

这里是示例输入,

Col A     Col B
AAA      www.google.com
BBB      www.google.com
CCC      www.gmail.com 
DDD      www.yahoo.com

预期输出

Col A     Col B 
AAA,BBB  www.google.com
CCC      www.gmail.com
DDD      www.yahoo.com

我正在使用下面的 awk 命令来隔离重复的条目,

awk 'NR == 1 {p=$2; next} p == $2 { printf "%s,%s\n",$1,$2} {p=$2}' FS="," Input.csv

但我无法将重复项分开。

任何建议或指点将不胜感激。

【问题讨论】:

  • 为什么会有Java标签?
  • 菜鸟错误。删除它

标签: shell awk


【解决方案1】:

如果您不担心输出的顺序(就像它应该与显示的 Input_file 相同),那么以下内容可能会对您有所帮助。

awk 'FNR==1{print;next} {a[$2]=a[$2]?a[$2] "," $1:$1}  END{for(i in a){print a[i],i}}'  OFS="\t"   Input_file

输出如下:

Col A     Col B
CCC     www.gmail.com
DDD     www.yahoo.com
AAA,BBB www.google.com

【讨论】:

  • 感谢您的回复。它以预期的格式生成输出,但丢弃了一些项目。
  • 输入内容好像被粘贴了。你能查一下吗?
  • @ArunKumar,啊,现在检查 :) 告诉我。
  • 我收到了预期格式的响应,但我缺少一些数据。例如:如果有三个 www.google.com 值,那么我在输出中只得到两个
  • 感谢您的信息
猜你喜欢
  • 2016-11-14
  • 1970-01-01
  • 2018-06-28
  • 2014-04-29
  • 2015-11-30
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2016-03-30
相关资源
最近更新 更多