[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