欢迎光临
我们一直在努力

awk表达式功能

awk表达式功能

1. 比较表达式:
比较表达式匹配那些只在条件为真时才运行的行。这些表达式利用关系运算符来比较数字和字符串。见如下awk支持的条件表达式列表:

运算符 含义 例子
< 小于 x < y <= 小于等于 x <= y == 等于 x == y != 不等于 x != y >= 大于等于 x >= y
> 大于 x > y
~ 匹配 x ~ /y/
!~ 不匹配 x !~ /y/

/>cat passwd                              #实例文件打印
1root:x:0:0:root:/root:/bin/bash
2bin:x:1:1:bin:/bin:/sbin/nologin
3daemon:x:2:2:daemon:/sbin:/sbin/nologin
4adm:x:3:4:adm:/var/adm:/sbin/nologin
5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6sync:x:5:0:sync:/sbin:/bin/sync
/>awk -F : ‘$3==0{print $0}’ passwd          #打印第三个域等于0的字段行
1root:x:0:0:root:/root:/bin/bash
/>awk -F : ‘$3>2{print $0}’ passwd          #打印第三个域大于2的字段行
4adm:x:3:4:adm:/var/adm:/sbin/nologin

5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6sync:x:5:0:sync:/sbin:/bin/sync
/>awk -F : ‘$1~/(adm|lp)/{print $0}’ passwd          #打印第一域匹配adm或者lp字段行
4adm:x:3:4:adm:/var/adm:/sbin/nologin
5lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

2. 条件表达式:
条件表达式使用两个符号—-问号和冒号给表达式赋值: conditional expression1 ? expression2 : expressional3,其逻辑等同于C语言中的条件表达式。其对应的if/else语句如下:
{
if (expression1)
expression2
else
expression3

}

#从passwd中选择前5字段行打印出第四个字段,如果第四个字段大于3则输出”big $4″否则输出”small $4″

/>awk -F : ‘NR< =5 {print ($4>3 ? “big\t” $4 : “small\t” $4)}’ passwd

3. 数学表达式:
运算可以在模式内进行,其中awk将所有的运算都视为浮点运算,见如下列表:

运算符 含义 例子
+ 加 x + y
– 减 x – y
* 乘 x * y
/ 除 x / y
% 取余 x % y
^ 乘方 x ^ y
#如果记录中以2-4开头 则打印出第一个域和第三个域乘以2

/>awk -F : ‘{OFS = ”        “}$1~/^[2-4]/ {print  $1,$3*2}’ passwd

4. 逻辑表达式:
见如下列表:

运算符 含义 例子
&& 逻辑与 a && b
|| 逻辑或 a || b
! 逻辑非 !a
#打印出第三、四域均大于3的字段行的1,3,4域

/>awk -F : ‘$3>=3 && $4>=3{print $1,$3,$4}’ passwd
4adm 3 4
5lp 4 7

5. 范围模板:
范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现,第一个模板的下一次出现到第一个模板的下一次出现等等。如果第一个模板匹配而第二个模板没有出现,awk就显示到文件末尾的所有行。

/>awk -F : ‘/^1root/,/^4adm/ {print $1}’ passwd       #打印出第一个域以1root开到的行到第一个域以4adm开头的行
1root
2bin
3daemon
4adm

6. 赋值符号

#找出第一个域等于4adm的字段将其第三个域赋值为0然后输出该字段的1,3域

/>awk -F: ‘$1==”4adm”{$3==0 ;print $1,$3}’ passwd
4adm 3

未经允许不得转载:SRE空间 » awk表达式功能

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

oracle