The awk search (/string/…) requires that / be escaped as it is the delimiter for the search pattern. This can be a pain to fix for full pathnames:
awk -v MNT=/abc/def/file ‘/^MNT/{print $0}’
This fails as the imbedded slashes will be interpreted as more search delimiters. While you could insert escape characters like this:
awk -v MNT=i”/abc/def/file ‘/^MNT/{print $0}’
It is easier to use an imbedded procedure to compare like this
awk -v MNT=${MNT} ‘{if ($1==MNT) {print}}’
In this case, $1 is the first space-delimited string on the line which will act similarly to the ^MNT requirement (find the pathname only at the beginning of the line). Then $1==MNT is a straight text comparison with no escape needed for slashes.
An example of this can be found when parsing nfsstat -m which looks like this:
$ nfsstat -m
/mnt2 from atl4:/tmp (Addr 10.11.10.240)
Flags: vers=2,proto=udp,auth=unix,hard,intr,dynamic…
All: srtt= 0 ( 0ms), dev= 0 ( 0ms), cur= 0 ( 0ms)
/mnt3 from atl1:/var/tmp/Packages (Addr 10.11.10.200)
Flags: vers=3,proto=tcp,auth=unix,hard,intr,link,symlink…
All: srtt= 0 ( 0ms), dev= 0 ( 0ms), cur= 0 ( 0ms)
To locate the version for a given mountpoint, this will return the Flags for a selected mountpoint:
MNT=/mnt3
nfsstat -m |
awk -v MNT=${MNT} ‘{if ($1==MNT) {printf;getline;print}}’ |
cut -f 1,3 -d:
Result: vers=3,proto=tcp,auth=unix,hard,intr,link,symlink,…
The first part of the awk statement gets the line where /mnt3 is the first string. Then, printf is used to write the string WITHOUT a newline. getline pulls in the next line. This is concatenated with the first line so cut can now return the field after the first :char. Additional processing can be used to pull the vers=3 value. As a precaution to format changes, be sure to parse each flag to find vers= since it may be in the same order with changes to nfsstat.
Here is the complete code snippet to return the NFS version from $MNT
NFSLINE=$(nfsstat -m |
awk -v MNT=${MNT} ‘{if ($1==MNT) {printf;getline;print}}’ |
cut -f 1,3 -d:)
for NFSFLAG in $(echo “$NFSLINE” |
awk -F : ‘{print $2}’ | tr -s “,” ” “)
do
if [ $(echo $NFSFLAG | grep -ci vers=) -gt 0 ]
then
NFSVER=$(echo “$NFSFLAG” | cut -d= -f2)
break
fi
done
$NFSVER will contain the version number.
– See more at: http://serviceitdirect.com/blog/awk-alternate-search-method-special-chars#sthash.QklCRhWf.dpuf
Tags: HP-UX