실제로 사용 하는 경우 ( 또는을 gawk
사용 하는 경우에도 적용되지 않지만) 로드 가능한 확장 중 하나를 사용하여 기본적 으로이 작업을 수행 할 수 있습니다nawk
mawk
버전 4.0 이후 사용할 수 있습니다. 나는 사용하고있다 gawk-4.1.x
(v4.0은 확장을로드하는 구문에 변형이 있었다).
filefuncs
확장 기능을 로드하면 다음과 같은 기능이 추가 stat()
됩니다.
@load "filefuncs"
BEGIN {FS=":"}
(NF==7) {
printf("user: %s %i %i\n",$1,$3,$4)
rc=stat($6,fstat)
err=ERRNO # ERRNO is a string, not an int!
if (rc<0) {
printf(" error: %s rc=%i %s\n",$6,rc,err)
} else {
if (fstat["type"]!="directory")
printf(" ENOTDIR: %s %s\n",$6,fstat["type"])
if (fstat["uid"]!=$3)
printf(" uid mismatch: %s %i!=%i\n",$6,fstat["uid"],$3)
if (fstat["gid"]!=$4)
printf(" gid mismatch: %s %i!=%i\n",$6,fstat["gid"],$4)
}
}
참조 filefuncs(3am)
이 확장에 대한 자세한 맨 페이지를 .
다음과 같이 실행하십시오.
gawk -f testhome.awk <(getent passwd) # bash/zsh and glibc
gawk -f testhome.awk /etc/passwd
gawk
바이너리가 다음과 같은 확장을 지원 하는지 확인할 수 있습니다 .
BEGIN {
if (!("api_major" in PROCINFO))
printf("No extension API.\n")
else
printf("Extension API v%s.%s.\n",PROCINFO["api_major"],PROCINFO["api_minor"])
}
따로 : gawk
또한 passwd
파일 을 읽을 수있는 작은 라이브러리 함수가 제공되며 다음과 같이 호출 할 수 있습니다.
gawk -i passwd.awk -- 'BEGIN { while(uu=getpwent()) {print uu;} endpwent(); }'
getent
nsswitch를 지원하므로 Linux / glibc 시스템 에서 사용하는 것을 선호합니다 .