Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1177030
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-03 19:14:04

Awk 多行合并

2015-10-18 

(点击上方公众号,可快速关注)


作者:程默

网址:http://www.cnblogs.com/chengmo/archive/2010/10/13/1850145.html


awknext语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。


text.txt 内容是:


a

b

c

d

e


[chengmo@centos5 shell]$ 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′


awk next使用实例:


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


需要通过awk将输出格式变成:


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


分析:


分析发现需要将包含有“web”行进行跳过,然后需要将内容与下面行合并为一行。


[chengmo@centos5 shell]$ 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


next在多行合并,以及选择性输出方面,非常方便。大家在使用时候不妨试试。

阅读(372) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~