![awkにファイルがあるかどうかを確認する方法は? [-d 'ファイル名'] 失敗](https://linux33.com/image/62683/awk%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E3%81%82%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B-d%20'%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D'%5D%20%E5%A4%B1%E6%95%97.png)
ホームディレクトリセットが存在しないユーザーのリストを作成しようとしています。 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