在Linux系统中使用awk文本处理工具,有时需要将多行合并,这就需要用到awknext语句了,下面小编就给大家介绍下Linux中使用awk实现多行合并的方法,需要的朋友可以来了解下。
awknext语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。
代码如下:
text.txt内容是:
a
b
c
d
e
[chengmo@centos5shell]$awk‘NR%2==1{next}{printNR,$0;}’text.txt
2b
4d
当记录行号除以2余1,就跳过当前行。下面的printNR,$0也不会执行。下一行开始,程序有开始判断NR%2值。这个时候记录行号是:2,就会执行下面语句块:‘printNR,$0’
awknext使用实例:
代码如下:
要求:
文件:text.txt格式:
web01[192.168.2.100]
httpdok
tomcatok
sendmailok
web02[192.168.2.101]
httpdok
postfixok
web03[192.168.2.102]
mysqldok
httpdok
需要通过awk将输出格式变成:
web01[192.168.2.100]:httpdok
web01[192.168.2.100]:tomcatok
web01[192.168.2.100]:sendmailok
web02[192.168.2.101]:httpdok
web02[192.168.2.101]:postfixok
web03[192.168.2.102]:mysqldok
web03[192.168.2.102]:httpdok
分析:
分析发现需要将包含有web行进行跳过,然后需要将内容与下面行合并为一行。
[chengmo@centos5shell]$awk‘/^web/{T=$0;next;}{printT:\t$0;}’test.txt
web01[192.168.2.100]:httpdok
web01[192.168.2.100]:tomcatok
web01[192.168.2.100]:sendmailok
web02[192.168.2.101]:httpdok
web02[192.168.2.101]:postfixok
web03[192.168.2.102]:mysqldok
web03[192.168.2.102]:httpdok
上面就是Linux使用awk进行多行合并的方法介绍了,在文中使用next语句是十分方便的,在循环匹配中,如果遇到next,就会自动跳过,从而实现多行合并。