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

     

  • 相关阅读:
    poj 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/liuqiang0/p/8521218.html
Copyright © 2011-2022 走看看