常用awk命令示例汇总
2017-04-12 00:00
330 查看
摘要: 常用的awk命令例子
通过下面方法,来使用冒号“:”和“.”来分割。
如果你对过滤特定的行有兴趣,可以看一下我写的《利用linux命令行工具进行文本行过滤》
接下来利用awk来显示特定的文本行,NR代表行号:
《鸟哥的Linux私房菜》 鸟哥著
《码农增刊 Linus与Linux》 码农 图灵社区
简介
awk是一个强大的文本处理工具,它主要是针对文本列来进行处理。awk的语法比较复杂,下面通过总结常用的例子来方便日常的工作使用。常见用法示例
准备工作
首先使用你喜爱的文本编辑器创建包含下面内容的文件,这个文件将在下面使用到,最后文件名称保存为Awk.txt。$ cat Awk.txt Line1 john.wang Male 30 021-11111111 Line2 lucy.yang Female 25 021-22222222 Line3 jack.chen Male 35 021-33333333 Line4 lily.gong Female 21 021-44444444 shanghai
使用特定的分隔符
awk默认是用空格和tab符来分割的,连续的空格和tab也可以,例如,一个空格和一个tab符也默认当作一个分隔符来处理。通过下面方法,来使用冒号“:”和“.”来分割。
$ echo '1:2:3' | awk -F : '{ print $1, $2, $3, $1+$2+$3 }' #指定使用‘:’冒号分隔 1 2 3 6 $ cat Awk.txt | awk -F . '{ print $1, $2 }' #指定使用‘.’英文句号分隔 Line1 john wang Male 30 021-11111111 Line2 lucy yang Female 25 021-22222222 Line3 jack chen Male 35 021-33333333 Line4 lily gong Female 21 021-44444444 shanghai
文本列过滤
可以通过awk来对列进行过滤,打印显示特定的列,其中变量NF是总列数。$ cat Awk.txt | awk '{ print $2, $4 }' #打印姓名和年龄两列 john.wang 30 lucy.yang 25 jack.chen 35 lily.gong 21 $ awk '{ print $2, $4 }' Awk.txt #和上面命令结果一样,只是没有使用管道 $ cat Awk.txt | awk '{ print $NF }' #打印最后一列 021-11111111 021-22222222 021-33333333 shanghai $ cat Awk.txt | awk '{ print $(NF-1) }' #打印倒数第二列 30 25 35 021-44444444
文本行过滤
awk命令和实现head和tail已经sed等工具类似的功能来对文本的行进行过滤,显示特定的行。如果你对过滤特定的行有兴趣,可以看一下我写的《利用linux命令行工具进行文本行过滤》
接下来利用awk来显示特定的文本行,NR代表行号:
$ awk 'NR<=3' Awk.txt #显示前3行 Line1 john.wang Male 30 021-11111111 Line2 lucy.yang Female 25 021-22222222 Line3 jack.chen Male 35 021-33333333 $ awk '(NR>=2)&&(NR<=3)' Awk.txt #显示第2和3行 Line2 lucy.yang Female 25 021-22222222 Line3 jack.chen Male 35 021-33333333
求和累加
使用下面方法来对特定的列进行求和$ seq 10 | awk '{ sum += $1} END { print sum }' #计算1到10的累加 55 $ cat Awk.txt | awk '{ sum += $4} END { print sum/NR }' #对第4列求和并计算平均年龄 27.75
通过awk统计最常用的命令
下面的命令比较复杂,不过这是一个比较好玩的命令,这条命令可以统计你最常用的10条命令。$ history | awk '{CMD[$2]++; count++;} END{ for (a in CMD) print CMD[a]" "CMD[a]/count*100"%" , a}' | > grep -v "./" | column -c 3 -s " " -t | sort -nr | nl | head -n 10 1 1037 13.4344% ls 2 808 10.4677% fg 3 657 8.51147% cd 4 639 8.27827% python3 5 316 4.09379% adb 6 291 3.76992% echo 7 283 3.66628% git 8 248 3.21285% ll 9 243 3.14808% sudo 10 218 2.8242% vi
总结
awk其实也可以算做是一种脚本语言,但是它和现在流行的python语言相比,语法不够简洁。而且awk也是比较古老的工具了,例如上面最后统计常用命令的例子,完全可以用python脚本来实现。当然python脚本代码的行数就要比awk多,但是代码的可读性更好。所以awk还是适合较小的任务,而python可以完成更加复杂的工作。参考文献:
《Linux系统命令及Shell脚本实践指南》 王军著《鸟哥的Linux私房菜》 鸟哥著
《码农增刊 Linus与Linux》 码农 图灵社区
相关文章推荐
- 转载自马哥视频学习笔记---Linux Web服务器网站故障分析常用的命令之awk用法的简单示例
- Docker入门实践(六) 常用操作命令示例汇总
- awk 基本命令格式及常用示例
- Node.js操作redis示例及常用命令汇总
- Node.js操作redis示例及常用命令汇总
- AIX 常用命令汇总
- DB2常用命令汇总之三
- oracle 常用命令大汇总
- AIX 常用命令汇总
- DB2常用命令汇总之一
- Linux系统命令汇总之系统备份常用命令
- AIX 常用命令汇总
- oracle 常用命令大汇总(转)
- vim常用命令汇总
- SQL的基本命令和几个常用函数汇总
- SQL的基本命令和几个常用函数汇总
- DB2常用命令汇总之一
- SQL的基本命令和几个常用函数汇总
- oracle 常用命令大汇总
- AIX常用命令汇总