Linux命令-awk命令
awk是一种处理文本文件的语言,是一个强大的文本分析工具。awk其实不仅仅是工具软件,还是一种编程语言。awk是以文件的一行内容为处理单位的。awk读取一行内容,然后根据指定条件判断是否处理此行内容,若此行文本符合条件,则按照动作处理文本,否则跳过此行文本,读取下一行进行判断。
awk是”Aho Weiberger and Kernighan”三个作者的姓的第一个字母。
由于awk天生提供对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(常见的是空格)隔开,我们可以将这个文件看成是由很多列的文本组成,这样的文件最适合用awk进行处理,其实awk在工作中很多时候被用来处理log文件,进行一些统计工作等。
1.命令格式:
1 | awk [选项] 'BEGIN{commands} pattern{commands} END{commands}' file |
echo ‘1|2|3|4’ | awk -F ‘|’ ‘{print $3}’
echo | awk ‘{print “hello world!”}’
2.命令功能:
awk是一种处理文本文件的语言,是一个强大的文本分析工具。
3.命令参数:
1 | -F fs, 指定以fs作为输入行的分隔符,awk命令默认分隔符为空格或制表符。 |
4.awk变量:
awk内建变量:
1 | $0, 当前记录,当前行所有列 |
自定义变量类型:
1 | echo | awk 'i="hello world"{print i}' |
数组:
1 | echo | awk '{a[1]="hello";a[2]="world!";print a[1],a[2]}' |
5.awk常用逻辑运算
1 | ? 条件表达操作符 |
6. awk条件判断
1.直接在最外层:
1 | echo '11 22' | awk '$1==11{print $2}' |
2.使用if语句:
1 | echo '11 22' | awk '{if($1==11) print $2}' |
3.与或非:
1 | 与 |
4.匹配:
1 | ~ 模糊匹配 |
5.正则匹配
1 | 查看包含root的行 |
7. awk循环
for(i=1;i<=10;i++)
:类似C等语言的循环
1 | 使用awk将每行插入一个符号"|"和tab建 |
for(i in 数组)
:类似shell
1 | echo|awk 'BEGIN{a[1]=1;a[2]=2}END{for(i in a) print i,a[i]}' |
8. 常用内置函数
1 | gsub(r,s) 在整个$0中用s替代r,相当于sed 's///g' |
9.格式化输出
1 | awk '{printf "%-5s %.2d",$1,$2}' file |
说明:
1 | printf 表示格式输出 |
10.使用实例:
实例1:打印指定倒数字段数:
1 | 利用NF打印倒数字段,比如打印倒数第2行 |
实例2:打印文件第1000行到2000行
1 | awk '1000<=FNR && FNR <=2000' file |
实例3:使用for循环、数组、自加对netstat的tcp状态统计
1 | netstat -an |awk '/^tcp/ BEGIN{s[$NF]++} END{for(a in s) print a,s[a]}' |
实例4:替换
eg: test.txt:
1 | zhangsan 70 99 88 77 good |
命令:
1 | awk '{if($2>=90) gsub($NF,"Very Good")} {print $0}' test.txt |
结果:
1 | zhangsan 70 99 88 77 good |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LXY's blog!