यदि आप वास्तव में उपयोग कर रहे हैं gawk(हालांकि आप उपयोग कर रहे हैं nawk, या mawk, जिस स्थिति में यह लागू नहीं होगा), आप मूल रूप से v4.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(); }'
मैं getentLinux / glibc सिस्टम पर उपयोग करना पसंद करता हूं क्योंकि यह nsswitch का समर्थन करता है।