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

관련 정보