六周第三次课(4月27日)笔记

9.6/9.7 awk

awk工具


awk支持分段匹配

awk指定分割符并打印出来:awk -F ':' '{print $1}' xxx.txt



awk 指定分隔符把所有内容打印出: awk -F ':'{print $0}' xxx.txt 或者直接 awk '{print $0}'  xxx.txt



如果不指定分隔符,默认以空白或者空格作为分隔符,测试结果如下:


打印多段内容时,只需要在其中加上逗号


如果想在字符中间以指定符号作为分隔符,以#为例加“#”即可


awk实现查找无需加多余字符,以/oo/为例 awk '/oo/' xxx.txt

同样支持正则表达式,且分段式搜索如:  awk -F ':' '$1 ~/o+/' xxx.txt; awk -F ':' '$1 ~/oo+/' xxx.txt


awk可执行多个操作(以root/user, test.txt为例): awk -F ':' '/root/ {print $1,$2,$3} /user/ {print $1,$3,$4}' test.txt

使用egrep/grep -E查看含有root/user的行  egrep/grep -E 'root|user' test.txt


awk -F ':' '/root|user/ {print $0}' test.txt== grep -E 'root|user' test.txt  区别仅仅在颜色


awk命令同样可以结合数学运算,如==,>=,<=,!= (特别注意:以1000为例,加上双引号"",系统会认为是一个字符串,在对比查询中会以ASCII码表中的编码进行大小对比,如果对比对象是数字本身无需添加双引号,如果是字符串需要加之)



awk$各段对比



列出第三段大于1000或者第七段等于/sbin/nologin的行


~匹配符,即:第三段大于1000或者第七段中包含/bash/的

OFS为内置变量,输出生效为print后的分隔符,代替-F ':',具体语法为:

awk -F ':' '{OFS="xx"} 条件句 {print $xxxx}'  xxx.txt


if语句


NR 行 NF段数和

awk -F '{print NR":"$0}' test.txt

awk -F '{print NF":"$0}' test.txt



NR, NF同样可以用于条件判断

'NR<=10': 列出行号小于等于10的行

'NR<=10 && $1 ~ /root|adm/' : 列出行号小于等于10且第一列中含有root或者adm的行

' {print $NR":"$NF}': 打印出所有行数字的列和段数列


赋值和等于的区别:顾名思义,前者是对某个指定变量进行赋值,后者是数学表达式中的相等

在awk中,如下图所示: $1=root把第一段都赋值给root;而等于号则是查找第一段等于root的行,OFS变量可以打印前先加上


awk求和

awk -F ':' '{(tot=total+$3)}; END {print tot}' filename



猜你喜欢

转载自blog.csdn.net/fuel91/article/details/80110189
今日推荐