the5fire的技术博客

关注python、vim、linux、web开发和互联网--life is short, we need python.


shell中用awk和next处理多行文本合并

作者:the5fire | 标签:       | 发布:2013-05-24 5:49 a.m. | 阅读量: 9554, 9453

刚才群里有人问了个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


----EOF-----

扫码关注,或者搜索微信公众号:码农悟凡


其他分类: