awk with egrep filter无法使用条件返回null值

时间:2017-01-09 02:32:29

标签: awk grep

我是awk的新手,我的命令如下。当没有行返回需要打印通过时,否则打印失败。但是当没有值时,传递无法显示

egrep -v "^\+" /etc/passwd | awk -F: '($1!="root" && $1!="sync" && $1!="shutdown" && $1!="halt" && $3<500 && $7!="/sbin/nologin") {print}' | awk '{if(NR==0||NR<=0||'null') print "pass"; else print "fail"}'

结果应该返回通过但是有打印,请就此提出建议。

2 个答案:

答案 0 :(得分:1)

将all整合为一个,例如

$ awk -F: '!/^+/ && $1!="root" && ... {f=1; exit} 
       END {print (f?"fail":"pass")}' /etc/passwd

如果设置退出代码

,可能会更好
$ awk -F: '!/^+/ && $1!="root" && ... {exit 1}' /etc/passwd

答案 1 :(得分:1)

这可能是你正在尝试做的事情:

awk -F: '/^+/ || $1~/^(root|sync|shutdown|halt)$/ || $3>=500 || $7=="/sbin/nologin"{next} {f=1; exit} END{print (f ? "pass" : "fail")}'