awk文字列比較が機能しません

awk文字列比較が機能しません

すべてのラインを出力として取得します。次のコードのif条件は機能しません。

grep -Ev '^(halt|sync|shutdown)' /etc/passwd | awk -F: '{\
    if("$7"!="$(which nologin)") \
        { print $0; } \
    }'

私は別のif条件を試しました。

また、すべての値を返します。

if("$1"!="usbmux") \
        { print $1; } \

しかし、$1にusbmuxエントリがあっても何も返しません。

if("$1"=="usbmux") \
        { print $1; } \

答え1

ではawk変数を引用しないでください。

awk -F : '$1 == "usbmux"'

これにより、最初の:区切りフィールドが正確に文字列であるすべての行が印刷されますusbmux。条件に関連する明示的なジョブがない場合、デフォルトのジョブは現在のレコードを印刷することです(デフォルトは行)。

awk -F : -v string="$( command -v nologin )" '$7 == string'

これにより、7番目の:区切り文字フィールドがユーティリティパスであるすべての行が印刷されますnologin。このawk変数はコマンドラインの出力stringに設定されます。command -v nologin-v

awk -F : -v string="$( command -v nologin )" '$1 !~ /^(halt|sync|shutdown)$/ && $7 == string'

haltこれは上記のコマンドと同じことを行いますが、最初のフィールドが(または使用されていない)いずれかである行syncを防ぎます。shutdowngrep

代わりにcommand -v nologinユーティリティへのパスを取得しようとしました。 」nologinwhich「which」を使わないのはなぜですか?それでは何を使うべきですか?「なぜ。

関連情報