正则之-awk

正则-awk

awk稍微复杂,awk比sed更适合在分段上

实例操作:

打印第一段

awk -F ':' '{print $1}' test.txt  分隔符为冒号,这里不更改文件

所有的段用$0

没有的-F的适合,默认用空格等作为符合

-F指定分隔符

 

打印多段内容awk -F ':' '{print $1,$2,$5}' 1.txt  打印1 2 5

awk -F ':' '{print $1,$2,$5}' test.txt

 

替换成#号,注意#号要用双引号

 

匹配功能

awk '/oo/' test.txt   这个则匹配有oo的行

 

精确匹配有o的第一段

awk -F ':' '$1 ~ /oo/' test.txt

 

awk支持多个条件匹配

awk -F ':' '/oo/ {print $1,$4} /user1/ {print $1,$6}' test.txt

 

6)条件操作符

例如打印第三段=0的值,==是精确匹配 一个=号是赋值

awk -F ':' '$3==0'  test.txt

awk -F ':' '$3>=500 {print $0}' test.txt  第三段大于等于500

 

稍微注意的是,如果匹配数字比较,需要把比较的数字用双引号括起来,awk才不会认为是数字,而会认为是字符

 

7)打印出某段不等于xx的行

awk -F ':' '$7!="/sbin/nologin"  {print $0} ' test.txt

字符作为判断条件则是要使用双引号括起来的,!7=表示不等于 意义是第七个不是sbin/nologin

 

8)两个字段之间比较

awk -F ':'  '$3<$4' test.txt  符合对应要求的行

 

awk -F ':'  '$3==$4' test.txt //打印第3段与第4段相同的行

awk -F ':' '$3>"4" && $3<"8"' test.txt  匹配第三段第一个字符大于4 且小于8的字符

 

或者打印满足两个条件的

awk -F ':' '$3>500 || $7==/sbin/nologin' test.txt   //匹配第三段大于500且第七段带有字符的

awk的内置变量

  1. OFS变量和-F选项有类似的功能,也是用来定义分隔符的,但是它是在输出的时候定义的

awk -F ':' '{OFS="@"} {print $1,$2,43}'  test.txt

awk -F ':' '{OFS="@"} {if($3>500) {print $1,$2,43}}'  test.txt   if条件筛选

 

  1. 变量NR的用法 表示行号 

相当于grep –n功能,显示左边的行号

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

 

3)变量NF表示用分隔符分隔后一共有多少段

awk -F ':' '{print NF ":" $0}'  test.txt ,例如这里passwd一共有7

 

使用NR打印前多少行 

awk -F ':' 'NR<=4'  test.txt  //这里打印前面4

 

4)打印2个条件同时满足的行

5)2个变量的应用 nf一直是7,因为一共7 第八段没有东西了,相当于$1$7,$2$7

 

6) 赋值 

head -n 3 /etc/passwd |awk -F ':' '$1="root"'

 

head -n 3 test.txt |awk -F ':' '{OFS=":"} $1="root"'加上ofs之后就有了:分隔符了

 

7) 求和

第三段数字的累加,第一行的0加第三段的数字

第二行为第一行的结果加上本行的数值

awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_41654660/article/details/81902248
今日推荐