sed – Awk有条件地组合多行

前端之家收集整理的这篇文章主要介绍了sed – Awk有条件地组合多行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果它们匹配ID,我想将来自不同长度的多行的值组合成一行.

输入示例是:

  1. ID: Value:
  2. a-1 49
  3. a-2 75
  4. b-1 120
  5. b-2 150
  6. b-3 211
  7. c-1 289
  8. d-1 301
  9. d-2 322

期望的输出示例是:

  1. ID: Value:
  2. a 49,75
  3. b 120,150,211
  4. c 289
  5. d 301,322

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

解决方法

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

猜你在找的Linux相关文章