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