$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)}'
cat把结果输出给awk,awk把域之间的分隔符设为冒号。
假如域的数量(NF)不等于7,就执行下面的程式。
printf打印字符串"line ?? does not have 7 fields",并显示该条记录。
假如第一个域没有包含任何字母和数字,printf打印“no alpha and numeric user id" ,并显示记录数和记录。
假如第二个域是个星号,就打印字符串“no passwd”,紧跟着显示记录数和记录本身。
13. 几个实例
$ awk '/^(no|so)/' test-----打印任何以模式no或so开头的行。
$ awk '/^[ns]/{print $1}' test-----假如记录以n或s开头,就打印这个记录。
$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----假如第一个域以两个数字结束就打印这个记录。
$ awk '$1 == 100 || $2
$ awk '$1 != 10' test-----假如第一个域不等于10就打印该行。
$ awk '/test/{print $1 10}' test-----假如记录包含正则表达式test,则第一个域加10并打印出来。
$ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test-----假如第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。
$ awk '/^root/,/^mysql/' test----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的任何记录。假如找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则表达式mysql开头的记录为止,或到文档末尾。
14. awk编程
14.1. 变量
在awk中,变量无需定义就能够直接使用,变量类型能够是数字或字符串。
赋值格式:Variable = expression,如$ awk '$1 ~/test/{count = $2 $3; print count}' test,上式的作用是,awk先扫描第一个域,一旦test匹配,就把第二个域的值加上第三个域的值,并把结果赋值给变量count,最后打印出来。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!