zoukankan      html  css  js  c++  java
  • awk 多行合并【next 使用介绍】(常见应用4)

    在awk进行文本处理时候,我们可能会遇到。将多行合并到一行显示问题。 有点象sql里面,经常遇到的行转列的问题。 这里需要用到next语句。

    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使用实例:

    要求:

    文件:text.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

    需要通过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在多行合并,以及选择性输出方面,非常方便。大家在使用时候不妨试试。

  • 相关阅读:
    python实现二分查找算法例子代码
    Python实现计算圆周率π的值到任意位的方法示例
    什么是TWS耳机
    [置顶] 单例模式lua实现
    推荐五星级C语言学习网站
    poj2689 Prime Distance 有难度 埃拉托斯尼斯筛法的运用
    局域网
    pager-taglib分页处理的使用
    创建ListView的基本步骤
    求最大连续子数列和(只扫描一次数列)
  • 原文地址:https://www.cnblogs.com/chengmo/p/1850145.html
Copyright © 2011-2022 走看看