diff options
Diffstat (limited to 'awklib')
-rw-r--r-- | awklib/eg/lib/inplace.awk | 28 | ||||
-rw-r--r-- | awklib/eg/lib/ns_passwd.awk | 72 |
2 files changed, 89 insertions, 11 deletions
diff --git a/awklib/eg/lib/inplace.awk b/awklib/eg/lib/inplace.awk index 6771bc45..68dad92e 100644 --- a/awklib/eg/lib/inplace.awk +++ b/awklib/eg/lib/inplace.awk @@ -21,11 +21,15 @@ # # Andrew J. Schorr, aschorr@telemetry-investments.com # January 2013 +# +# Revised for namespaces +# Arnold Robbins, arnold@skeeve.com +# July 2017 @load "inplace" -# Please set INPLACE_SUFFIX to make a backup copy. For example, you may -# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule. +# Please set inplace::suffix to make a backup copy. For example, you may +# want to set inplace::suffix to .bak on the command line or in a BEGIN rule. # By default, each filename on the command line will be edited inplace. # But you can selectively disable this by adding an inplace=0 argument @@ -33,23 +37,25 @@ # reenable it later on the commandline by putting inplace=1 before files # that you wish to be subject to inplace editing. -# N.B. We call inplace_end() in the BEGINFILE and END rules so that any +# N.B. We call inplace::end() in the BEGINFILE and END rules so that any # actions in an ENDFILE rule will be redirected as expected. +@namespace "inplace" + BEGIN { - inplace = 1 # enabled by default + enable = 1 # enabled by default } BEGINFILE { - if (_inplace_filename != "") - inplace_end(_inplace_filename, INPLACE_SUFFIX) - if (inplace) - inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX) + if (filename != "") + end(filename, suffix) + if (enable) + begin(filename = FILENAME, suffix) else - _inplace_filename = "" + filename = "" } END { - if (_inplace_filename != "") - inplace_end(_inplace_filename, INPLACE_SUFFIX) + if (filename != "") + end(filename, suffix) } diff --git a/awklib/eg/lib/ns_passwd.awk b/awklib/eg/lib/ns_passwd.awk new file mode 100644 index 00000000..b9b6bce5 --- /dev/null +++ b/awklib/eg/lib/ns_passwd.awk @@ -0,0 +1,72 @@ +# ns_passwd.awk --- access password file information +# +# Arnold Robbins, arnold@skeeve.com, Public Domain +# May 1993 +# Revised October 2000 +# Revised December 2010 +# +# Reworked for namespaces June 2017, with help from +# Andrew J.: Schorr, aschorr@telemetry-investments.com + +@namespace "passwd" + +BEGIN { + # tailor this to suit your system + Awklib = "/usr/local/libexec/awk/" +} + +function Init( oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat) +{ + if (Inited) + return + + oldfs = FS + oldrs = RS + olddol0 = $0 + using_fw = (PROCINFO["FS"] == "FIELDWIDTHS") + using_fpat = (PROCINFO["FS"] == "FPAT") + FS = ":" + RS = "\n" + + pwcat = Awklib "pwcat" + while ((pwcat | getline) > 0) { + Byname[$1] = $0 + Byuid[$3] = $0 + Bycount[++Total] = $0 + } + close(pwcat) + Count = 0 + Inited = 1 + FS = oldfs + if (using_fw) + FIELDWIDTHS = FIELDWIDTHS + else if (using_fpat) + FPAT = FPAT + RS = oldrs + $0 = olddol0 +} + +function awk::getpwnam(name) +{ + Init() + return Byname[name] +} + +function awk::getpwuid(uid) +{ + Init() + return Byuid[uid] +} + +function awk::getpwent() +{ + Init() + if (Count < Total) + return Bycount[++Count] + return "" +} + +function awk::endpwent() +{ + Count = 0 +} |