यदि आप वास्तव में उपयोग कर रहे हैं 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(); }'
मैं getent
Linux / glibc सिस्टम पर उपयोग करना पसंद करता हूं क्योंकि यह nsswitch का समर्थन करता है।