BEGIN模式是处理文本之前需要执行的操作
END模式是处理完所有行之后执行的操作
awk 'BEGIN{print "daidai"}' 2.txt
#没有打印出2.txt文件的内容,想要打印2.txt内容,还需要加一个print
awk 'BEGIN{print "daidai"} {print $0}' 2.txt
#BEGIN模式动作完成后,再对文件2.txt处理,打印出全部内容
awk '{print $1,$3} END{print "daidai"}' 2.txt
#awk先对文件处理完毕,打印出第1列,第3列
#END模式就是处理完所有指定的文本之后,执行的动作

awk结合BEGIN和END模式
awk 'BEGIN{print "处理文本之前,awk执行了这个动作~~"} {print $0} END{print "所有文本已经执行完毕,执行了end模式"}' 2.txt

awk模式pattern
pattern也可以理解为条件
BEGIN和END也属于条件
awk默认是按行处理文本,如果不指定任何模式(条件),awk默认一行一行处理如果指定了模式,只有符合模式的才会被处理
awk 'NR==2{print $0}' 2.txt
awk 'NR<3{print $0}' 2.txt #打印出前2行


awk 'NR!=3{print $0}' 2.txt
#将不等于第3行的打印出来

awk基础总结空模式,没有指定任何的模式(条件),因此每一行都执行了对应的动作,空模式会匹配文档的每一行,每一行都满足了(空模式)
awk '{print $1}' 2.txt
关系运算符模式,awk默认执行打印输出动作(指定打印第2到第5行)
awk 'NR==2,NR==4' 2.txt

awk与正则表达式
正则表达式主要与awk的pattern模式(条件)结合使用
不指定模式,awk每一行都会执行对应的动作
指定了模式,只有被模式匹配到的、符合条件的行才会被执行找出3.txt 中有以games开头的行1、用grep过滤
grep '正则表达式' 3.txt
cat -n 3.txt #查看3.txt文件
grep '^games' 3.txt #找出3.txt中有以games开头的行

2、awk使用正则语法
awk '/正则表达式/动作' 3.txt
awk命令使用正则表达式,必须把正则放在”//”双斜杠中,匹配到结果后执行动作{print $0},打印整行信息grep可以过滤
#匹配到以games开头的行,并打印出来
awk '/^games/{print $0}' 3.txt
#使用-F ":" 对文件进行切割,再选择以games开头的行,打印出第1列和最后1列
awk -F ":" '/^games/{print $1,$NF}' 3.txt
awk -F ":" 'BEGIN{printf "%st%st%st%stn","用户名","用户id","用户家目录","用户解释器"} {printf "%st%st%st%stn",$1,$3,$6,$7}' 3.txt
#看起来不太好看,没有对齐
awk -F ":" 'BEGIN{printf "%-10st%-10st%-10st%-10sn","用户名","用户id","用户家目录","用户解释器"} {printf "%-10st%-10st%-10st%-10sn",$1,$3,$6,$7}' 3.txt


awk命令执行流程
解读需求:从3.txt文件中,寻找我们想要的信息,按照以下顺序执行
awk 'BEGIN{commands} pattern{commands} END{commands}'
1、优先执行BEGIN{}模式中的语句
2、从3.txt文件中读取第一行,然后执行pattern{}进行匹配/^n/寻找n开头的行,找到了执行{print}进行打印
3、当awk读取到文件数据流的结尾时,会执行END{c}
习题:找出3.txt文件中禁止登录的用户(/sbin/nologin)正则表达式中如果出现了”/”则需要进行转义找出3.txt文件中禁止登录的用户(/sbin/nologin)1、用grep找出
grep "/sbin/nologin" 3.txt
grep "/sbin/nologin" 3.txt -n

awk '//sbin/nologin/{print $0}' 3.txt
awk '//sbin/nologin/{print NR,$0}' 3.txt

找出文件的区间内容
正则模式
awk '/正则表达式/{动作}' file.txt
行范围模式
awk '/正则1/,/正则2/{动作}' file.txt
awk '/^operator/,/^ftp/{print NR,$0}' 3.txt

内容来源参选B站up主Linux解忧堂
2022-08-05 00:10 发表于江苏
阅读原文