Re: scripting help (75 Views)
Reply
Trusted Contributor
lawrenzo
Posts: 383
Registered: ‎06-06-2003
Message 1 of 2 (95 Views)

scripting help

hello

 

I'd like some help with a script

 

I have a file with the following data

 

         Device                 Product                   Device
---------------------- --------------------------- ---------------------
Name            Type   Vendor    ID           Rev  Ser Num      Cap (KB)
---------------------- --------------------------- ---------------------
/dev/sdbc       M(2)   EMC       SYMMETRIX    5876 110265D000   17677440
/dev/sdbd       M(3)   EMC       SYMMETRIX    5876 110265F000   53032320
/dev/sdbe       M(2)   EMC       SYMMETRIX    5876 1102705000   17677440
/dev/sdbf              DGC       RAID 5       0326 8600001D     62914560
/dev/sdbg              DGC       RAID 5       0326 8D0000AA    199229440
/dev/sdbh              DGC       RAID 5       0326 09000028     26214400
/dev/emcpoweraa        DGC       RAID 5       0326 8600001D     62914560

some lines have 6 fields and other lines have seven fields

 

I execute the pvs command and I want to search each lun from the EMC output and depending on the number of fields to determine what to print

 

  PV             VG           Fmt  Attr PSize   PFree
  /dev/emcpowerm emcvg        lvm2 a-    67.43G      0
  /dev/emcpowero VG1          lvm2 a-    16.86G  11.86G
  /dev/emcpowerp bc2eoaipp1vg lvm2 a-    50.57G   8.57G
  /dev/sda2      systemvg     lvm2 a-    33.59G      0
  /dev/sdad      emcvg        lvm2 a-    67.43G 428.00M

 

so I have come up with 

 

cat /tmp/pvs |awk 'NR>1 {sub("\/dev\/","",$1);print $1,$2,$5}' |while read PV VG PSZ

do

        awk -v search=${PV} '$0 ~ search {if (line != "") print line; line =$NF} {if(NF==6) {line=$1":"$4":"$5":"$NF}} {if(NF==7) {line=$1":"$5":"$6":"$NF}};END{print line}' /tmp/symcli.data)

 


done

 

it doesnt quite work because the output is the same

 

/dev/emcpoweraa:0326:8600001D:62914560
/dev/emcpoweraa:0326:8600001D:62914560
/dev/emcpoweraa:0326:8600001D:62914560
/dev/emcpoweraa:0326:8600001D:62914560
/dev/emcpoweraa:0326:8600001D:62914560
/dev/emcpoweraa:0326:8600001D:62914560
/dev/emcpoweraa:0326:8600001D:62914560

can someone help out with the syntax please :)

 

thanks

 

Chris

hello
Please use plain text.
Honored Contributor
Goran Koruga
Posts: 1,271
Registered: ‎12-05-2002
Message 2 of 2 (75 Views)

Re: scripting help

Hello.

 

it's not a syntax issue, it's a logic issue.

 

For the sample data files provided, none of your lines match this line:

 

$0 ~ search

 

However for each line from the "/tmp/symcli.data" file, the last line matches this check:

 

if(NF==7)

 

As such, "END{print line}" always prints the last line from that file.

 

You will want to revisit your logic.

 

Regards,

    Goran

Please use plain text.
The opinions expressed above are the personal opinions of the authors, not of HP. By using this site, you accept the Terms of Use and Rules of Participation