shell中用awk和next处理多行文本合并
刚才群里有人问了个shell的问题,顺着查了下,记录下来,方便日后查询。
问题是这样,如下一个文件ips.txt:
192.168.0.18 1121 1122 192.168.0.19 2122 3232 3356 192.168.0.20 1112
要求输出结果是:
192.168.0.18:1121 192.168.0.18:1122 192.168.0.19:2122 192.168.0.19:3232 192.168.0.19:3356 192.168.0.20:1112
直观来说,用py很好解决:
#coding:utf-8 ip = None for line in open('ips.txt', 'r'): line = line.strip() if line.startswith('192'): ip = line else: print '%s:%s' % (ip, line)
用shell怎么解决呢?关键字:shell 文本 多行合并,于是有了这个解决方案:
awk '/^192/{T=$0;next;}{print T":"$1;}' ips.txt
这是awk中next的用法,查了查next的用法和解释,明白了。 其实这行代码的逻辑就是我那个python代码的逻辑。强大的shell呀。
ref: http://www.cnblogs.com/chengmo/archive/2010/10/13/1850145.html