awkにファイルがあるかどうかを確認する方法は? [-d 'ファイル名'] 失敗

awkにファイルがあるかどうかを確認する方法は? [-d 'ファイル名'] 失敗

ホームディレクトリセットが存在しないユーザーのリストを作成しようとしています。 awkでこれを行うことができるようですが、構文に問題があります。

] に「間違った構文」というメッセージが表示され続けます。私は何が間違っていましたか?

awk -F: '{ if(![ -d "$6"]){ print $1 " " $3 " " $7}}' /etc/passwd

私が使用する最後のコードは次のとおりです。

awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd

私は持っています関連する質問があります。

答え1

使用できる

システム(命令語)
    オペレーティングシステムコマンドの実行注文するそれから
    awkプログラムに戻ります。返品注文する終了ステータス。 

たとえば、

awk -F: '{if(system("[ ! -d " $6 " ]") == 0) {print $1 " " $3 " " $7}}' /etc/passwd

答え2

私の考えはそれ[ -d ]があまりないと思いますawk。何かの空の殻だけです。私はそうします:

awk -F: '{ print $1,$3,$7}' /etc/passwd | 
    while read name uid shell; do 
        [ -d "/home/$name" ] || echo "$name $uid $shell"; 
    done

もちろん、@Janisが正しく指摘したように、シェルですべてのことを行うことができます。

while IFS=: read  name x uid x x x shell rest; do
     [ -d "/home/$name" ] || echo "$name $uid $shell" 
done < /etc/passwd

答え3

あなたはそれを使用することができます並ぶ:

BEGIN {
   print getline < "file" < 0 ? "not exists" : "exists"
}

答え4

ほとんどなんだか…

perl -F: -ane 'if(!-d $F[5]){ print "$F[0] $F[2] $F[6]" }' /etc/passwd

関連情報