Scripting Awk help

Go to solution
Trusted Contributor

Scripting Awk help

Ive posted this in the Linux forum but decided to repost here because I normally get a better response:



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


        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/




it doesnt quite work because the output is the same



can someone help out with the syntax please :)






P.S. This thread has been moved from HP-UX-Languages and Scripting to Linux - sysadmin. -HP Forum Moderator

Dennis Handly
Acclaimed Contributor

Re: Scripting Awk help

>I have a file with the following data


The two files that you have produce no output, after fixing your scripts.


It helps if you format them better (and remove the evil cat):

awk '
NR > 1 {
   print $1, $2, $5
}' /tmp/pvs |
    while read PV VG PSZ; do
        awk -v search=${PV}  '
$0 ~ search {
   if (NF==6) {
      line=$1 ":" $4 ":" $5 ":" $NF
   } else if (NF==7) {
      line=$1 ":" $5 ":" $6 ":" $NF
   print line

   exit  # stop after first match
}' /tmp/

Trusted Contributor

Re: Scripting Awk help

thank you Dennis


that 'cat' command was there to simulate the pvs command but again your help is greatly appreciated :)