BabyMonster
BabyMonster

Reputation: 1

awk with egrep filter unable to return null value with condition

I new in awk, my command as below. When there is no row return need print pass, else print fail. But when there is no value, the pass is unable to display

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

The result should return pass but there is noting print, please advice on this.

Upvotes: 0

Views: 83

Answers (2)

Ed Morton
Ed Morton

Reputation: 203324

This MAY be what you're trying to do:

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

Upvotes: 1

karakfa
karakfa

Reputation: 67467

consolidate all into one, for example

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

perhaps better if you set the exit code

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

Upvotes: 1

Related Questions