Formatting output

I have the output like below:

DEV#:   9  DEVICE NAME: hdisk9  TYPE: 1750500  ALGORITHM:  Load Balance
SERIAL: 68173531021
==========================================================================
Path#      Adapter/Path Name          State     Mode     Select     Errors
    0           fscsi0/path0           OPEN   NORMAL  100920851          0
    1*          fscsi1/path1           OPEN   NORMAL          7          0

DEV#:  10  DEVICE NAME: hdisk10  TYPE: 1750500  ALGORITHM:  Load Balance
SERIAL: 68173531022
===========================================================================
Path#      Adapter/Path Name          State     Mode     Select     Errors
    0           fscsi0/path0           OPEN   NORMAL   75036048          0
    1*          fscsi1/path1           OPEN   NORMAL         63          0

DEV#:  11  DEVICE NAME: hdisk11  TYPE: 1750500  ALGORITHM:  Load Balance
SERIAL: 68173531025
===========================================================================
Path#      Adapter/Path Name          State     Mode     Select     Errors
    0           fscsi0/path0           OPEN   NORMAL  318733022          0
    1*          fscsi1/path1           OPEN   NORMAL          7          0

DEV#:  12  DEVICE NAME: hdisk12  TYPE: 1750500  ALGORITHM:  Load Balance
SERIAL: 68173531026
===========================================================================
Path#      Adapter/Path Name          State     Mode     Select     Errors
    0           fscsi0/path0           OPEN   NORMAL   85608664          0
    1*          fscsi1/path1           OPEN   NORMAL          7          0

DEV#:  13  DEVICE NAME: hdisk13  TYPE: 1750500  ALGORITHM:  Load Balance
SERIAL: 68173531027
===========================================================================
Path#      Adapter/Path Name          State     Mode     Select     Errors
    0           fscsi0/path0           OPEN   NORMAL  202312366          0
    1*          fscsi1/path1           OPEN   NORMAL         21          0

DEV#:  14  DEVICE NAME: hdisk14  TYPE: 1750500  ALGORITHM:  Load Balance
SERIAL: 68173531028
===========================================================================
Path#      Adapter/Path Name          State     Mode     Select     Errors
    0           fscsi0/path0           OPEN   NORMAL  238355812          0
    1*          fscsi1/path1           OPEN   NORMAL          7          0
......

and need to get the formatted output with:

DEVICE NAME   SERIAL
hdisk9             1021
hdisk10            1022
....

The SERIAL is from the last 4 digit of i.e. 68173531021.

Please advise.

Try:

awk '/DEV/{
  getline p
  split(p,F)
  if(NR==2) print $3 FS $4,F[1]
  print $5, substr(F[2],length(F[2])-3,4) 
}
' OFS='\t' infile
1 Like

If your file structure is always as displayed above, i.e. the serial in in the next line after device name, try

awk 'BEGIN{print "DEVICE NAME\tSERIAL"} /DEVICE NAME/ {printf "%s\t", $5; getline; print substr($2, length($2)-3)}' file
DEVICE NAME    SERIAL
hdisk9    1021
hdisk10    1022
hdisk11    1025
hdisk12    1026
hdisk13    1027
hdisk14    1028
1 Like

Not much difference from solutions posted above:

awk -F":" ' BEGIN {
        printf "DEVICE NAME\tSERIAL\n";
} /DEVICE NAME:/ {
        d = $3;
        sub(" ",x,d);
        sub(/[ \t].*/,x,d);
        getline;
        s = substr($2,length($2)-3);
        printf "%s\t\t%s\n", d, s;
} ' filename
DEVICE NAME     SERIAL
hdisk9          1021
hdisk10         1022
hdisk11         1025
hdisk12         1026
hdisk13         1027
hdisk14         1028
1 Like

Thank you! It works perfect!