2014-01-26 91 views
1

我需要幫助編寫以下腳本。如果當前行以#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 

回答

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 
+0

您可以刪除括號,但它可能是一些不太可讀。 '{print $ 0,msg?msg:「」; msg =「」}' – Jotne

+2

@Jotne聲明然後變得模棱兩可......'Gawk'會好的,'BSD awk'會抱怨。無需更多,更安全,更具可讀性。 –

+0

啊,很高興知道:) – Jotne