如何通过终端命令实现分组合并重复项并同行展示输出?
实现分组合并重复项的终端命令解决方案
需求说明
现有输入文本:
x 1 x 2 x 3 y 1 y 2 y 3
需要将相同前缀的行合并,把对应的值用分号拼接,输出为:
x 1;2;3 y 1;2;3
可用终端命令
可以用awk命令实现该需求,命令如下:
awk '{if (prev == $1) {vals = vals ";" $2} else {if (prev != "") print prev " " vals; prev = $1; vals = $2}} END {print prev " " vals}' input.txt
命令解释
- 逐行遍历输入文本,判断当前行第一个字段(前缀)是否与上一行前缀一致:
- 一致则将当前行第二个字段追加到值列表,用分号分隔
- 不一致则输出上一组的前缀和值列表,再更新前缀和值列表为当前行内容
- 最后通过
END块输出最后一组的内容
如果是处理管道传递的标准输入,可省略input.txt,示例:
cat input.txt | awk '{if (prev == $1) {vals = vals ";" $2} else {if (prev != "") print prev " " vals; prev = $1; vals = $2}} END {print prev " " vals}'
内容的提问来源于stack exchange,提问作者simone attanasio
相关产品推荐
相关产品推荐

