<,<=,==,!=,>=,>,~,!~(最后两个表示匹配和不匹配正则表达式)
条件表达式
条件表达式1 ? 条件表达式2 : 条件表达式3
算术运算
可以在模式中进行计算,awk都将按浮点方式执行运算。支持:+,-,*,/,%,^(幂)
逻辑操作符与复合模式
&&,||,!
例6:一个验证passwd文件有效性的例子
long@long-Ubuntu:~$ cat /etc/passwd | awk -F: '\
> NF != 7 {\
> printf("line %d, does not have 7 fields:%s\n",NR,$0)}\
> $1 !~ /[A-Za-z0-9]/{printf("line %d, non alpha and numeric user id:%d: %s\n",NR,
$0)}\
> $2 == "*" {printf("line %d, no password: %s\n", NR,$0)}'
1 cat把结果输出给awk,awk把域之间的分隔符设为冒号。
2 如果域的数量(NF)不等于7,就执行下面的程序。
3 printf打印字符串"line ?? does not have 7 fields",并显示该条记录。
4 若第一个域没包含任何字母和数字,printf打印“no alpha and numeric user id" ,并显示记录数和记
录。
5 如果第二个域是一个星号,就打印字符串“no passwd”,紧跟着显示记录数和记录本身。
例7:几个示例:
$ awk '/^(no|so)/' filename-----打印所有以模式no或so开头的行。
$ awk '/^[ns]/{print $1}' filename-----如果记录以n或s开头,就打印这个记录。
$ awk '$1 ~/[0-9][0-9]$/(print $1}' filename-----如果第一个域以两个数字结束就打印这个记录。
$ awk '$1 == 100 || $2 < 50' filename-----如果第一个或等于100或者第二个域小于50,则打印该行。 $ awk '$1 != 10' filename-----如果第一个域不等于10就打印该行。 $ awk '/test/{print $1 + 10}' filename-----如果记录包含正则表达式test,则第一个域加10并打印 $ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' filename—---如果第一个域大于5则打印问号后面
的表达式值,否则打印冒号后面的表达式值。
$ awk '/^root/,/^mysql/' filename----打印从以正则表达式root开头的记录到以正则表达式mysql开头
的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则
表达式mysql开头的记录为止,或到文件末尾。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code