awk模式pattern

BEGIN模式是处理文本之前需要执行的操作

END模式是处理完所有行之后执行的操作

awk 'BEGIN{print "daidai"}' 2.txt#没有打印出2.txt文件的内容,想要打印2.txt内容,还需要加一个printawk '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.txtawk '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.txtgrep "/sbin/nologin" 3.txt -n
图片
awk '//sbin/nologin/{print $0}' 3.txtawk '//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 发表于江苏

阅读原文

简介:生信小技能,欢迎关注微信公众号:生信小猪
(0)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“生信小猪”,分享链接:https://www.zyxiao.com/p/309718    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部