我的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脚本执行此操作?感谢您的任何意见。
答案 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
,
。;
分隔的第二列。 END
块中迭代我们的数组并打印值。