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
评论前必须登录!
注册