在awk进行文本处理时候,我们可能会遇到。将多行合并到一行显示问题。awk next语句对多行合并非常有用:其在循环时逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。
示例1:
测试文本内容如下 :
<br />
[root@361way srv]# cat text.txt
a
b
c
d
e
只打印偶数行的内容,并显示行号:
[root@361way srv]# awk 'NR%2==1{next}{print NR,$0;}' text.txt
2 b
4 d
当记录行号除以2余 1,就跳过当前行。下面的print NR,$0也不会执行。 下一行开始,程序有开始判断NR%2 值。这个时候记录行号是:2 ,就会执行下面语句块:'print NR,$0' 。这里是为了演示next的用法,在实际应用中,更多会使用下面的用法:
[root@361way srv]# awk 'NR%2==0{print NR,$0;}' text.txt
2 b
4 d
示例2:
测试文件内容如下:
<br />
# cat test.txt
web01[192.168.2.100]
httpd ok
tomcat ok
sendmail ok
web02[192.168.2.101]
httpd ok
postfix ok
web03[192.168.2.102]
mysqld ok
httpd ok
输出时为了美观,我想让每台服务器的服务及OK值在同一行,这里可以通过如下代码实现:
<br />
[root@361way srv]# awk '/^web/{T=$0;next;}{print T":\t"$0;}' test.txt
web01[192.168.2.100]: httpd ok
web01[192.168.2.100]: tomcat ok
web01[192.168.2.100]: sendmail ok
web02[192.168.2.101]: httpd ok
web02[192.168.2.101]: postfix ok
web03[192.168.2.102]: mysqld ok
web03[192.168.2.102]: httpd ok
上面的功能就python也可以搞定,不过略麻烦而已,如下 :
<br />
#coding:utf-8
ip = None
for line in open('ips.txt', 'r'):
line = line.strip()
if line.startswith('web0'):
ip = line
else:
print '%s:%s' % (ip, line)
<br />
<br />
《awk next多行合并》有3条评论