Help with awk to extract additional info

Hi

I use multipath linux command to get LUNs info and find out if any failed.

#  multipath -ll >/tmp/mpfail
#  cat /tmp/mpfail
multipath.conf line 109, invalid keyword: user_friendly_names
multipath.conf line 153, invalid keyword: user_friendly_names
multipath.conf line 193, invalid keyword: user_friendly_names
multipath.conf line 225, invalid keyword: user_friendly_names
multipath.conf line 255, invalid keyword: user_friendly_names
multipath.conf line 293, invalid keyword: rr_nim_io
multipath.conf line 295, invalid keyword: user_friendly_names
multipath.conf line 315, invalid keyword: user_friendly_names
LUN08 (3600507680180856b1800000000000680) dm-12 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][active]
 \_ 3:0:10:7 sdan 66:112 [active][ready]
 \_ 3:0:11:7 sdav 66:240 [active][ready]
 \_ 1:0:10:7 sdh  8:112  [active][ready]
 \_ 1:0:13:7 sdp  8:240  [active][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 1:0:15:7 sdaf 65:240 [active][ready]
 \_ 3:0:13:7 sdbd 67:112 [active][ready]
 \_ 3:0:15:7 sdbl 67:240 [active][ready]
 \_ 1:0:14:7 sdx  65:112 [active][ready]
LUN07 (3600507680180856b1800000000000679) dm-13 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][active]
 \_ 3:0:13:0 sdaw 67:0   [active][ready]
 \_ 3:0:15:0 sdbe 67:128 [active][ready]
 \_ 1:0:14:0 sdq  65:0   [active][ready]
 \_ 1:0:15:0 sdy  65:128 [active][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 3:0:10:0 sdag 66:0   [active][ready]
 \_ 3:0:11:0 sdao 66:128 [active][ready]
 \_ 1:0:10:0 sda  8:0    [active][ready]
 \_ 1:0:13:0 sdi  8:128  [active][ready]
LUN06 (3600507680180856b180000000000067f) dm-11 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][enabled]
 \_ 1:0:15:6 sdae 65:224 [failed][ready]
 \_ 3:0:13:6 sdbc 67:96  [failed][ready]
 \_ 3:0:15:6 sdbk 67:224 [failed][ready]
 \_ 1:0:14:6 sdw  65:96  [failed][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 3:0:10:6 sdam 66:96  [failed][ready]
 \_ 3:0:11:6 sdau 66:224 [failed][ready]
 \_ 1:0:10:6 sdg  8:96   [failed][ready]
 \_ 1:0:13:6 sdo  8:224  [failed][ready]
LUN05 (3600507680180856b180000000000067e) dm-10 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][active]
 \_ 3:0:10:5 sdal 66:80  [active][ready]
 \_ 3:0:11:5 sdat 66:208 [active][ready]
 \_ 1:0:10:5 sdf  8:80   [active][ready]
 \_ 1:0:13:5 sdn  8:208  [active][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 1:0:15:5 sdad 65:208 [active][ready]
 \_ 3:0:13:5 sdbb 67:80  [active][ready]
 \_ 3:0:15:5 sdbj 67:208 [active][ready]
 \_ 1:0:14:5 sdv  65:80  [active][ready]
LUN04 (3600507680180856b180000000000067d) dm-9 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][active]
 \_ 1:0:15:4 sdac 65:192 [active][ready]
 \_ 3:0:13:4 sdba 67:64  [active][ready]
 \_ 3:0:15:4 sdbi 67:192 [active][ready]
 \_ 1:0:14:4 sdu  65:64  [active][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 3:0:10:4 sdak 66:64  [active][ready]
 \_ 3:0:11:4 sdas 66:192 [active][ready]
 \_ 1:0:10:4 sde  8:64   [active][ready]
 \_ 1:0:13:4 sdm  8:192  [active][ready]
LUN03 (3600507680180856b180000000000067c) dm-8 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][active]
 \_ 3:0:10:3 sdaj 66:48  [active][ready]
 \_ 3:0:11:3 sdar 66:176 [active][ready]
 \_ 1:0:10:3 sdd  8:48   [active][ready]
 \_ 1:0:13:3 sdl  8:176  [active][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 1:0:15:3 sdab 65:176 [active][ready]
 \_ 3:0:13:3 sdaz 67:48  [active][ready]
 \_ 3:0:15:3 sdbh 67:176 [active][ready]
 \_ 1:0:14:3 sdt  65:48  [active][ready]
LUN02 (3600507680180856b180000000000067b) dm-7 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][active]
 \_ 1:0:15:2 sdaa 65:160 [active][ready]
 \_ 3:0:13:2 sday 67:32  [active][ready]
 \_ 3:0:15:2 sdbg 67:160 [active][ready]
 \_ 1:0:14:2 sds  65:32  [active][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 3:0:10:2 sdai 66:32  [active][ready]
 \_ 3:0:11:2 sdaq 66:160 [active][ready]
 \_ 1:0:10:2 sdc  8:32   [active][ready]
 \_ 1:0:13:2 sdk  8:160  [active][ready]
LUN01 (3600507680180856b180000000000067a) dm-14 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][active]
 \_ 3:0:10:1 sdah 66:16  [active][ready]
 \_ 3:0:11:1 sdap 66:144 [active][ready]
 \_ 1:0:10:1 sdb  8:16   [active][ready]
 \_ 1:0:13:1 sdj  8:144  [active][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 3:0:13:1 sdax 67:16  [active][ready]
 \_ 3:0:15:1 sdbf 67:144 [active][ready]
 \_ 1:0:14:1 sdr  65:16  [active][ready]
 \_ 1:0:15:1 sdz  65:144 [active][ready]

#

As the above output has few failed lines I need both lines containing failed and also its LUN number (the line starts with LUN)

I tried below but no luck -

multipath -ll >/tmp/mpfail
awk '/^LUN/ { _ = $0 }
/failed/ && { print _; }
'  /tmp/mpfail

It would be fantastic if I could entire para/stanza of that LUN which has failed items like below:

LUN06 (3600507680180856b180000000000067f) dm-11 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][enabled]
 \_ 1:0:15:6 sdae 65:224 [failed][ready]
 \_ 3:0:13:6 sdbc 67:96  [failed][ready]
 \_ 3:0:15:6 sdbk 67:224 [failed][ready]
 \_ 1:0:14:6 sdw  65:96  [failed][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 3:0:10:6 sdam 66:96  [failed][ready]
 \_ 3:0:11:6 sdau 66:224 [failed][ready]
 \_ 1:0:10:6 sdg  8:96   [failed][ready]
 \_ 1:0:13:6 sdo  8:224  [failed][ready]

Please advise, thanks!!

Hello prvnrk,

Could you please try following and let me know if this helps you.

awk '/^LUN/{flag=1;if(flag && non_flag){print val};val=flag=non_flag=""} /failed/{non_flag=1} {val=val?val ORS $0:$0}'  Input_file

OR

Your_command | awk '/^LUN/{flag=1;if(flag && non_flag){print val};val=flag=non_flag=""} /failed/{non_flag=1} {val=val?val ORS $0:$0}'

Thanks,
R. Singh

1 Like

Try also

awk '
/^LUN/          {LUN = $0
                 next
                }
/round-robin/   {RRO = $0
                 next
                }
/failed/        {if (LUN) print LUN
                 if (RRO) print RRO
                 LUN = RRO = ""
                 print
                }
' /tmp/mpfail
1 Like

Thank you RavinderSingh13 & RudiC

Both solutions worked! :slight_smile:

Best regards,

Below is a slight change to RudiC's solution to also print the line following the LUN:

awk '
/^LUN/          {LUN = $0 
                 getline
                 LUN=LUN "\n" $0 
                }
/round-robin/   {RRO = $0 }
/failed/        {if (LUN) print LUN
                 if (RRO) print RRO
                 LUN = RRO = ""
                 print
                }
'  /tmp/mpfail

Output:

LUN06 (3600507680180856b180000000000067f) dm-11 IBM,2145
[features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=200][enabled]
 \_ 1:0:15:6 sdae 65:224 [failed][ready]
 \_ 3:0:13:6 sdbc 67:96  [failed][ready]
 \_ 3:0:15:6 sdbk 67:224 [failed][ready]
 \_ 1:0:14:6 sdw  65:96  [failed][ready]
\_ round-robin 0 [prio=40][enabled]
 \_ 3:0:10:6 sdam 66:96  [failed][ready]
 \_ 3:0:11:6 sdau 66:224 [failed][ready]
 \_ 1:0:10:6 sdg  8:96   [failed][ready]
 \_ 1:0:13:6 sdo  8:224  [failed][ready]