linux命令 awk学习

         我们在面试中经常被问到的Linux命令 就都会包括awk命令的使用,下面我向大家总结awk命令的详细使用。希望能给大家一些帮助。

         在国内很多大型公司面试后台程序员的时候无一例外都会问到下面这个题目

          “请统计某个apache或者nginx 内的log文件,并求出里面IP数的top10”

          当然,这个问题不仅仅可以用awk来回答,当然可以用基本的grep这个命令来回答。

          我先给出这个题目最基本的解决答案:

         

         假设这个就是apache 的access_log 文件(由于这个只是单机的apache  所以所有记录都是127.0.0.1,但是不妨碍学习这个问题的答案)

         awk '{if($1~/^[0-9]+\.+[0-9]+\.+[0-9]+\.+[0-9]$/)print $1}' access_log | sort | uniq -c | head -n 10

         截图如下

        

         这样就能够求出ip数的top10了

         接下来我们好好学习  awk 这个命令的使用规范:

         盗用网上的资料 如下所示       


        比如有这个文件awk.txt    里面内容如下:
       2 this is a test
       3 Are you like awk
       This's a test
       10 There are orange,apple,mongo

对照这个文件我们一起学习  awk 这个命令的使用:
example 1 
awk '{print $1,$4} ' awk.txt    =>>>   输出每行第一个跟第四个(根据空格根tab键隔开)
结果如下:
          a      a
          3      like
          This’s 
          10      orange
example  2
           awk '{printf "%-8s %-8s\n ",$1,$2} ' awk.txt  =>> 格式化输出第1,2 项
           结果如下:
          

example  3
          awk -Fh '{print $1,$4} ' awk.txt    =>>>  对第一行到第四行进行用h字符分割
          结果如下:
         
example  4
          awk -v a=1 -v b=2 '{print $1,$1+a,$1+b}' awk.txt   =>>>设置a,b两个变量,但是注意 在print 中 无法使用 $a $b这样的变量  只能对结果进行变量替换
          结果如下:
         
example  5
          awk  '$1>2 {print $1,$2,$4} ' awk.txt 
          awk  '$1==2 {print $1,$2,$4} ' awk.txt    =>>>在pattern前可以加上c语言判断
          结果如下:
         
example  6  
          <、<=、==、!=、>=、~匹配正则表达式、!~不匹配正则表达式
          
至此,大家肯定对awk这个命令多少有些了解了吧 。其实最后匹配ip的正则并不是正确的。因为每个ip段都是小于255的。所以要是严格匹配的话 就非常的复杂了。大家可以看这边博客的介绍,就详细介绍了正则匹配ip地址的方法
http://blog.csdn.net/q472599451/article/details/8237535
         希望大家喜欢我这次博客内容,谢谢!
    另注:
linux  下匹配数字  :
貌似用\d是不行的,Linux里建议使用 [0-9] 或者更符合 POSIX标准的 [[:digit:]]
例如:
echo 123abc | grep "^[0-9]"
echo 123abc | grep "^[[:digit:]]"





 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值