[CentOS] script help - '3rd last field'
Stephen Harris
lists at spuddy.org
Mon Jun 8 10:55:31 UTC 2009
On Mon, Jun 08, 2009 at 10:56:09AM +0100, Tom Brown wrote:
>
> > echo foo.bar.VALUE.baz.lala | awk -F. '{ print $(NF-2); }'
>
> excellent - just what i needed
awk is probably the most readable way. In traditional shell stuff like
this used to be done in awk or sed
awk -F. '{print $(NF-2)}'
sed -n 's/^.*\.\([^\.]*\)\.[^\.]*\.[^\.]*$/\1/p'
Now you _can_ do it totally inside a modern shell in a variety of ways.
Here are three options (tested with ksh93; _should_ work in bash, but
not tested)
1) Use IFS to split the string
a=foo.var.VALUE.baz.lala
OIFS="$IFS"
IFS="."
set -- $a
IFS="$OIFS"
shift $#-3
echo $1
2) variation using arrays
a=foo.var.VALUE.baz.lala
OIFS="$IFS"
IFS="."
set -A A -- $a
IFS="$OIFS"
let x=${#A[*]}-3
echo ${A[$x]}
3) Using string pattern matching
a=foo.var.VALUE.baz.lala
front=${a%.*.*.*}
b=${a#$front.}
b=${b%%.*}
echo $b
--
rgds
Stephen
More information about the CentOS
mailing list