Key-Value Pair in Multi-line Records
For example, the following sample data set have the above characteristics. What we need is a script to list down the values for a particular pool name. The first 3 lines are headers which can we going to ignore.
$ cat testdata.txt media media robot robot robot side/ ret size status ID type type # slot face level KBytes ---------------------------------------------------------------------------- One pool A00001 HCART TLD 0 26 - 10 101568 AVAILABLE Two pool B00001 HCART NONE - - - - - AVAILABLE B00002 HCART NONE - - - - - AVAILABLE Three pool C00001 HCART NONE - - - - - AVAILABLE C00002 HCART NONE - - - - - AVAILABLE C00003 HCART NONE - - - - - AVAILABLE Zero pool Four pool D00001 HCART2 NONE - - - - - AVAILABLE D00002 HCART3 NONE - - - - - AVAILABLE D00003 HCART3 NONE - - - - - AVAILABLE D00004 HCART3 NONE - - - - - AVAILABLE
By changing the default AWK FS (field separator) and RS (record separator) to be newline and blank line repsectively, we are able to handle the above multi-line records. In order to accommodate zero 'value' in a record, we need to put in the logical in the AWK code.
$ cat pool.sh #! /bin/sh PATH=/usr/bin:/bin:/usr/sbin:/usr/local/bin LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib if [ $# -ne 2 ]; then echo "Usage: $0\n" exit 1 fi txtfile=$1 pool=$2 if [ ! -f $txtfile ]; then echo "Error. $txtfile does not exist\n" exit 2 fi sed -n '4,$p' $txtfile | awk -v pool="$pool" ' BEGIN { FS="\n" RS="" poolname=sprintf("%s pool", pool) } $1 == poolname { start=1 next } start==1 && $0 ~ /pool/ { exit } start==1 { for (i=1;i<=NF;++i ) { print $i } exit }'
See script in action.
$ ./pool.sh testdata.txt One A00001 HCART TLD 0 26 - 10 101568 AVAILABLE $ ./pool.sh testdata.txt Two B00001 HCART NONE - - - - - AVAILABLE B00002 HCART NONE - - - - - AVAILABLE $ ./pool.sh testdata.txt Three C00001 HCART NONE - - - - - AVAILABLE C00002 HCART NONE - - - - - AVAILABLE C00003 HCART NONE - - - - - AVAILABLE $ ./pool.sh testdata.txt Four D00001 HCART2 NONE - - - - - AVAILABLE D00002 HCART3 NONE - - - - - AVAILABLE D00003 HCART3 NONE - - - - - AVAILABLE D00004 HCART3 NONE - - - - - AVAILABLE $ ./pool.sh testdata.txt Unknown $ ./pool.sh testdata.txt Zero $
So what is the big deal ? This is the kind of output you will get from NetBackup /usr/openv/netbackup/bin/goodies/available_media. With this script, you can handle the available_media output with ease.
Labels: awk, shell script
0 Comments:
Post a Comment
<< Home