zoukankan      html  css  js  c++  java
  • 深入浅出LINUX三剑客之AWK必杀技一例

    方法一【此法为绿叶】:如果用awk来处理的话,一般的同学可能会用下面的办法实现:

    [root@oldboy ~]# ifconfig eth0|grep ‘inet addr’|awk -F “:” ‘{print $2}’|awk ‘{print $1}’

    10.0.0.162

    小结:这个方法是常规方法,很好。但是我们有没有更简单的awk实现方法呢?往下看。

    方法二【此法为小红花】:通过awk同时使用多个分隔符来实现:

    [root@oldboy ~]# ifconfig eth0|grep ‘inet addr’|awk -F ‘[ :]’ ‘{print $13}’

    192.168.1.186

    提示:本题通过使用空格或冒号来做分隔符,然后一次性取出结果,就是空格或冒号可以看做是同一个分隔符。

    小结:这个方法很方便吧,同学们可以多用,选取包含IP地址行的特殊关键字‘inet addr’过滤然后,使用awk以空格和:同时做分隔符,然后取出需要的内容。

          本答案的最大缺点就是计算$n的时候很费劲,因为inet前面有多个空格,查到$13,真是不容易,如此看来从实现时间上可能还不如第一个方法快呢?那好引出我们今天的关键答案案例。

    方法三【大红花出场】:通过awk同时使用多个分隔符,然后通过正则匹配多个分隔符的方法来实现:

    [root@oldboy ~]# ifconfig eth0 |awk -F ‘[ :]+’ ‘NR==2 {print $4}’

    10.0.0.185

    我们来说明下这个简单易用的好办法:

    提示:本题NR是行号,分隔符+号匹配,[]里一个或多个任意一个分隔符,这里就是匹配一个或多个冒号或空格。

    1)awk -F 后面跟分隔符‘[空格:]+’,其中[空格:]多分隔符写法,意思是以空格或冒号做分隔,后面的“+”号是正则表达式,意思是匹配前面空格或冒号,两者之一的1个或1个以上。

    2)NR==2和sed -n “2p”,相当,意思都是选择第几行,例:

    [root@oldboy ~]# ifconfig eth0|awk NR==2

              inet addr:10.0.0.185  Bcast:10.0.0.255  Mask:255.255.255.0

    3)指定awk -F ‘[ :]+’分隔符后,不同字符串被分隔的列依次为:

              

    inet

    addr

    10.0.0.185

      Bcast:10.0.0.255  Mask:255.255.255.0

    第一列

    第二列

    第三列

    第四列

      后面忽略不计。

    4)整个答案awk部分意思是,通过NR==2取出第二行,然后,通过-F ‘[-:]+多分隔符正则匹配,然后通过{print $4}打印出第四列 !谢谢杨瑞同学的答案啊, 懒得写了,所以让你总结下。嘿嘿,看到后别怪老师啊。

    5)掌握了理论要去实践验证才是科学严谨的学习态度,好,来几个例子实践说话吧。

    [root@oldboy ~]# echo —1:—-2|awk -F ‘[-:]+’ ‘{print $2}’     

    1

    [root@oldboy ~]# echo —1:—-2|awk -F ‘[-:]+’ ‘{print $3}’     

    2

    [root@oldboy ~]# echo —1:::::2|awk -F ‘[-:]+’ ‘{print $3}’    

    2

     

  • 相关阅读:
    FASTJSON
    数据库索引(转)
    设计模式
    jQuery EasyUI教程之datagrid应用(三)
    EasyUI---tree
    EasyUI、Struts2、Hibernate、spring 框架整合
    eclipse最有用快捷键整理
    框架整合----------Hibernate、spring整合
    jQuery EasyUI教程之datagrid应用(二)
    marquee 标签 文字滚动
  • 原文地址:https://www.cnblogs.com/liuqiang0/p/8521218.html
Copyright © 2011-2022 走看看