带egrep筛选器的awk无法返回带条件的空值

带egrep筛选器的awk无法返回带条件的空值,awk,grep,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

我是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"}'

egrep-v“^\+”/etc/passwd|awk-F:”($1!=“root”&&&$1!=“sync”&&&$1!=“shutdown”&&&&$1!=“halt”&&&$3例如,将所有内容合并为一个

$ awk -F: '!/^+/ && $1!="root" && ... {f=1; exit} 
       END {print (f?"fail":"pass")}' /etc/passwd
如果您设置退出代码,可能会更好

$ awk -F: '!/^+/ && $1!="root" && ... {exit 1}' /etc/passwd

例如,将所有内容合并为一个

$ awk -F: '!/^+/ && $1!="root" && ... {f=1; exit} 
       END {print (f?"fail":"pass")}' /etc/passwd
如果您设置退出代码,可能会更好

$ awk -F: '!/^+/ && $1!="root" && ... {exit 1}' /etc/passwd

这可能就是你想要做的:

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

这可能就是你想要做的:

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

如果失败,您应该添加一个不打印“通过”的标志,因为:(来自awk文档)不属于BEGIN或END规则一部分的exit语句会停止对当前记录执行任何进一步的自动规则,跳过读取任何剩余的输入记录,如果有一个似乎有很多否定项,则执行END规则-我希望有一种方法可以指定OP希望在肯定条件下满足的任何条件r大于多重负片方式。IMHO如果失败,您应该添加一个不打印“通过”的标志,因为:(来自awk doc)不属于BEGIN或END规则一部分的exit语句会停止对当前记录执行任何进一步的自动规则,跳过读取任何剩余的输入记录,如果有一个似乎有很多否定项,则执行END规则-我希望有一种方法可以指定OP希望在肯定条件下满足的任何条件r比多重否定的方式。你的问题要包括简明、可测试、样本输入和预期输出,这样我们就不会猜测你的输入文件包含什么或你想要输出什么。你的问题要包括简明、可测试、样本输入和预期输出,这样我们就不会猜测你的输入文件包含什么或你想要输出什么。like总是,直接,高效就像总是,直接,高效