Simpler Navigation for Servers and Operating Systems - Please Update Your Bookmarks
Completed: a much simpler Servers and Operating Systems section of the Community. We combined many of the older boards, so you won't have to click through so many levels to get at the information you need. Check the consolidated boards here as many sub-forums are now single boards.
If you have bookmarked forums or discussion boards in Servers and Operating Systems, we suggest you check and update them as needed.
Showing results for 
Search instead for 
Did you mean: 

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 :)