根据条件将前一行与当前行连接

时间:2014-01-26 18:26:55

标签: awk concatenation conditional-statements lines

我需要帮助编写以下脚本。如果当前行以#STOP#开头,而前一行也以"#STOP#"开头,则只需打印该行。 如果当前行以"#STOP#"开头,而前一行也以"MSG#"开头,将前一行连接到当前行。

输入文件:

#STOP# |package1| function1
#STOP# |package2|   function2
#MSG#  |package3| SQL1
#STOP# |package4|  MapperBean
#MSG#  |package3|  SQL2
#STOP# |package4|  MapperBean
#STOP# |package4|   MapperBean
#STOP# |package5|  ActionItem

期望的输出:

#STOP# |package1| function1
#STOP# |package2|   function2
#STOP# |package4|  MapperBean  #MSG#  |package3| SQL1
#STOP# |package4|  MapperBean  #MSG#  |package3|  SQL2
#STOP# |package4|   MapperBean
#STOP# |package5|  ActionItem

1 个答案:

答案 0 :(得分:4)

awk的一种方式:

$ awk '$1=="#MSG#"{msg=OFS $0;next}{print $0(msg?msg:"");msg=""}' file
#STOP# |package1| function1 
#STOP# |package2|   function2 
#STOP# |package4|  MapperBean #MSG#  |package3| SQL1
#STOP# |package4|  MapperBean #MSG#  |package3|  SQL2
#STOP# |package4|   MapperBean 
#STOP# |package5|  ActionItem