shell腳本,awk如何處理文件中上下關聯的兩行。


文件d.txt如下內容

ggg 1
portals: 192.168.5.41:3260
werew 2
portals: 192.168.5.43:3260

如何把文件d.txt內容變為如下內容

ggg 192.168.5.41:3260
werew 192.168.5.43:3260

解題思路:

[root@localhost study]# awk '/port/{print a" "$2}{a=$1}' d.txt
ggg 192.168.5.41:3260
werew 192.168.5.43:3260

 '/port/{print a" "$2}{a=$1}' 

處理第一行的時候,以port開頭嗎?很明顯,不以port開頭,所以那個pattern不匹配,action不執行。但執行了后面的a=$1

處理第二行的時候,以port開頭,打印出來a和本行$2,再處理就是個循環過程。

詳細步驟:

由於第一行沒有匹配以port開頭的,所以print a" "$2不執行,執行a=$1. a=ggg

由於第二行有匹配以port開頭的,所以print a" "$2行執行,由於a=ggg,所以輸出 ggg 192.168.5.41:3260

由於第三行沒有匹配以port開頭的,所以print a" "$2不執行,執行a=$1. a=werew

由於第四行有匹配以port開頭的,所以print a" "$2行執行,由於a=werew,所以輸出 werew 192.168.5.43:3260

由此得到結果:

ggg 192.168.5.41:3260
werew 192.168.5.43:3260


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM