awk to use


简介

awkLinux最常用的字符串处理工具

awk 内置参数

  • NR – 行号
  • NF – 列总数
  • FILENAME – 当前文件名

实例

  • 打印/etc/passwd每行的行号,每行的字符总数以及第一行(即每行的用户名)

    print实现

    $ awk -F ':' '{print "Line:"NR,"Col:"NF,"User:"$1}' /etc/passwd

    printf实现

    $ awk -F ':' '{printf "Line:%s,Col:%s,User:%s\n",NR,NF,$1}' /etc/passwd
  • 打印/etc/passwdUID(即第三列)大于100的行的行号,字符总数以及第一列(即每行的用户名)

    print实现

    $ awk -F ':' '{if ($3>100) print "Line:"NR,"Col:"NF,"User:",$1}' /etc/passwd

    printf实现

    $ awk -F ':' '{if ($3>100) printf("Line:%s,Col:%s,User:%s\n",NR,NF,$1)}' /etc/passwd
  • 提取服务器日志fresh.logERROR行发生的时间

fresh.log内容格式如下图

利用sedawk

  $ sed '/ERROR/p' fresh.log | awk '{print $1}'

只利用awk

  $ awk '/ERROR/{print $1}' fresh.log

START END

awk提供了一个简单的方式在利用awk处理编程需求时的问题,例如制表时需在表前打印表头、表后打印表尾。

举一个案例,制表显示/etc/passwd的行号、列号和用户名

思路是首先在开头打印”Line Col User”,然后依次打印/etc/passwd每一行的行号、列号和用户名,最后另起一行打印--------并在中间加入awk操作的文件名以结束制表

$ awk -F ':' 'BEGIN{print "Line    Col    User"}{print NR,NF,$1}END{print "------",FILENAME,"------"}' /etc/passwd | grep -v "#"

其中的grep -v "#"用以过滤掉/etc/passwd中开头的无用说明信息

运行结果

为截图方便这里只截了前面的一些行和最后的一些行


文章作者: 套陆
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 套陆 !
评论
 上一篇
MantisBT 安装部署过程 MantisBT 安装部署过程
MantisBT是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务。在功能上、实用性上足以满足中小型项目的管理及跟踪。更重要的是其开源,不需要负担任何费用。本文简介MantisBT的安装部署过程。
2018-08-18
下一篇 
quicksort quicksort
快速排序算法实现
2018-07-20
  目录