2017-01-09 8 views
0

awkの新機能、私のコマンドは以下の通りです。行戻りがない場合は印刷パスが必要です。それ以外の場合は印刷が失敗します。値がないときしかし、パスはパスを返す必要がありますawkはegrepフィルターで条件付きヌル値を返すことができません。

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

結果を表示することができませんが、注目にプリントがあり、この上でアドバイスをしてください。

+0

簡潔でテスト可能なサンプル入力と期待される出力を含めるようにあなたの質問を編集してください。あなたの入力ファイルに何が含まれているのか、あるいは出力したい。 –

答えて

1

あなたは

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

IMHO失敗した場合に "pass"を表示しないフラグを追加します:*(awk docから)BEGINまたはENDルールの一部ではないexitステートメントは、現在のレコードのそれ以上の自動ルールの実行を停止し、残りの入力レコードを読み飛ばし、ENDルールを実行します。* – NeronLeVelu

+0

はい、そうです。 – karakfa

+0

多くのネガティブのように見えます - OPが何とか否定的ではなくポジティブな形で満足したいと望む条件を指定する方法があることを願っています。 –

1

終了コードを設定する場合、これはあなたが何をしようとしてかもしれおそらくより良い例

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

のために、一つにすべてを統合:

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

は常に、直接的かつ効率的です – NeronLeVelu

関連する問題