微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sed – Awk有条件地组合多行

如果它们匹配ID,我想将来自不同长度的多行的值组合成一行.

输入示例是:

ID:  Value:
a-1  49
a-2  75
b-1  120
b-2  150
b-3  211
c-1  289
d-1  301
d-2  322

期望的输出示例是:

ID:  Value:
a 49,75
b 120,150,211
c 289
d 301,322

我如何编写awk表达式(或sed或grep或其他东西)来检查ID是否匹配,然后将所有这些值打印到一行?我当然可以打印
将它们分成不同的列并稍后将它们组合起来,所以问题实际上只是有条件地打印,如果ID匹配,如果没有开始新的行.

解决方法

在awk中,如果您的ID聚集在一起:
awk 'NR==1 {print $0}
NR > 1 {sub("-.*","",$1)}
NR == 2 {prev=$1; printf "%s %s",$1,$2}
NR > 2 && prev == $1 {printf ",%s",$2}
NR > 2 && prev != $1 {prev=$1; printf "\n%s %s",$2}' your_input_file

原文地址:https://www.jb51.cc/linux/393274.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐