awk to use
简介
awk
是Linux
最常用的字符串处理工具
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/passwd
中UID(即第三列)
大于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.log
中ERROR
行发生的时间
fresh.log
内容格式如下图
利用sed
和awk
$ 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 许可协议。转载请注明来自 套陆的博客!
评论
TwikooUtterances