我正在尝试生成一个主目录集不存在的用户列表。看来我应该能够用 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 非常正确地指出的那样,您可以在 shell 中完成整个操作:
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
几乎是 awk...
perl -F: -ane 'if(!-d $F[5]){ print "$F[0] $F[2] $F[6]" }' /etc/passwd