在第一个字段中找到重复项,然后组合重复行的第二个字段中的文本

时间:2014-07-10 13:34:05

标签: awk

我的file.csv有两个类似的字段:

text,something
more,somethingelse
text,another
foo,bar

我对文件进行排序,以便第一个字段中的所有内容都按顺序排列,以便将第一列中的所有重复项组合在一起。

foo,bar
more,somethingelse
text,something
text,another

我需要做但无法弄清楚的是将第二个字段中的文本移动到与第一个字段中的副本相同的行,用“;”分隔。输入第二个字段的顺序无关紧要。我只想让输出像这样:

foo,bar
more,somethingelse
text,something; another

我试过这个,但它不起作用。因为我刚刚学习awk而不足为奇。

sort file.csv | awk 'BEGIN{last = ""; value = 0;} {if ($1 == last) {print $0, "; value";}}'

我希望'last'保持前一行的第一个字段的值,'value'保存前一行的第二个字段的值。但我无法弄清楚如何做到这一点。

是否可以使用shell脚本执行此操作?感谢您的任何意见。

1 个答案:

答案 0 :(得分:3)

这应该不需要sort

awk -F, '{
    lines[$1] = (lines[$1] ? lines[$1] "; " $2 : $0)
}
END {
    for (line in lines) print lines[line]
}' file
more,somethingelse
text,something; another
foo,bar
  • 将输入字段分隔符设置为,
  • 检查我们的行数组中是否存在column1。如果是,则填充由;分隔的第二列。
  • 如果我们的数组中不存在column1,则将整行指定为值
  • END块中迭代我们的数组并打印值。