标签:2.6-awk命令
awk命令 实现分段,对分段进行过滤,替换等操作,还可进行逻辑判断和数字运算。
比grep、sed、功能更多,更加强大。
分段打印:
awk -F ‘:‘ ‘{print $3,$4}‘ 1.txt 以:分割,打印第3段和第4段 -F指定分隔符
awk -F ‘:‘ ‘OFS="#" {print $3,$4}‘ 1.txt 以:分割,打印第3段和第4段,分段之间用指定的#号分割
匹配打印: //
awk ‘/user/‘ 1.txt 文本中匹配user的行
awk ‘/user|root/‘ 1.txt 或者关系
awk ‘/(oo)+/‘ 1.txt 匹配1-无穷个oo整体
awk ‘/r+o/‘ 1.txt 匹配ro rro rrr...o的行
注意:? + () |特殊字符,awk均支持,不必加上转义符\ 只有{}除外!
在grep、sed中均支持{},但awk属于复杂的流脚本处理语言,{}在它里面有特殊的含义。
但是用转义符\无效,只有一个方法:命令前面加上参数--posix 就OK了
分段匹配: $N~//
awk -F ‘:‘ ‘$1~/r*o/‘ 1.txt 以:为分割,第一段匹配o ro rro rrr...o的行
awk -F ‘:‘ ‘$1~/r*o/ {print $3}‘ 1.txt 1列匹配关键字,然后打印3列的内容(精准匹配,精准打印)
awk -F ‘:‘ ‘$1~/r*o/ {print $3};$1~/ro+/ {print $3}‘ 1.txt 两条过滤规则,两次执行,一条命令
awk -F ‘:‘ ‘$1~/root|user/ {print $3}‘ 1.txt 一条过滤规则,一次执行 (或者关系,都包含,打印一次)
awk --posix -F ‘:‘ ‘$1~/(ro)+|w{1,3}/ {print $1,$3}‘ 2.txt 使用{1,3}符号,必须加上--posix
条件操作符: ==等于 >=大于等于 <=小于等于 !=不等于 !~不匹配
awk -F‘:‘ ‘$3=="root"‘ 2.txt 第三段是root的打印出来 注意:=为赋值 ==为等于判断
awk -F‘:‘ ‘$3=="root||$7~/nologin/"‘ 2.txt 第3段是root或者第7段匹配nologin的行打印(或者关系)
awk -F‘:‘ ‘$3>=500‘ 2.txt 第3段数值大于等于500的行,打印出来
awk -F‘:‘ ‘$3>="500"‘ 2.txt "500"是按ASSIC码500比较,而不是数值500
awk -F‘:‘ ‘$7!="/sbin/nologin"‘ 2.txt 7段不等于关键字的行,注意/需要加上"" 否则不对
awk -F‘:‘ ‘$7!=/nologin/‘ 2.txt !~为不匹配,效果同上。注意关键字没有/和有/的区别
awk -F‘:‘ ‘$3>$4‘ 2.txt 3列大于4列的行
awk -F‘:‘ ‘OFS=":" {if($3>100){$7=$3+$4;print $0}}‘ 2.txt (匹配一次,打印一次)
如果3列大于100,7列=3列+4列,然后打印整行。OFS在{}外,没有print命令,则不打印结果。注意写法
awk -F‘:‘ ‘BEGIN {OFS=":"}{if($3>100){$7=$3+$4}} END {print $0}‘ 2.txt (匹配完毕后,打印最后结果)
只输出那个最后一行,END通常用在循环的时候,最后输出一个结果
内置变量: NR行数 $NR1~N段(必不同) NF分段数 $NF具体每行分段数的段(可相同可不同)
awk -F‘:‘ ‘NR<10‘ 2.txt 打印行号大于10的行
awk -F‘:‘ ‘NR==10 {print $3,$4}‘ 2.txt 打印10行的3段和段
awk -F‘:‘ ‘{if(NR==10) {print $3,$4}}‘ 2.txt 如果行号等于10,打印3段和4段 (看起来和上面效果一样)
注意:如果文本某个字段发生了改变,原有的分隔符会被空格替换,所以可以用OFS来指定新的分隔符。如下:
awk -F‘:‘ ‘OFS=":"{if(NR==10) {print $3,$4}}‘ 2.txt 显示结果同上,只是分隔符变为指定的:
如果要使用OFS,后面必须使用{},这是固定语法。否则提示出错。
awk -F‘:‘ ‘{if(NF==5) print $1}‘ 2.txt 如果行有5段,则打印第1段
awk -F‘:‘ ‘{print $NR,$NF}‘ 2.txt 打印函数$NR段和函数$NF段
awk -F‘:‘ ‘{print NR,$NF}‘ 2.txt 打印行数和函数段
awk -F‘:‘ ‘{print NR,NF}‘ 2.txt 打印行数和段数
awk -F‘:‘ ‘{print $NR,NF}‘ 2.txt 打印函数段和段数
数值运算:
awk -F‘:‘ ‘$7=$3+$4‘ 2.txt 7段的值改为3段+4段,并打印。文档改变,分隔符默认为空格
awk -F‘:‘ ‘OFS=":" {$7=$3+$4;print $0}‘ 2.txt 7段的值改为3段+4段,并打印。分隔符为:
循环:
awk -F‘:‘ ‘{(sum=sum+$3)}; END {print sum}‘ 2.txt 打印第3段的总和
标签:2.6-awk命令
原文地址:http://llzdwyp.blog.51cto.com/6140981/1678745