Operating System - Linux
1748154 Members
3678 Online
108758 Solutions
New Discussion юеВ

awk help to get stale path information

 
SOLVED
Go to solution
lawrenzo_1
Super Advisor

awk help to get stale path information

Hello all,

Please can someone help me with awk syntax ...

I have a report that details servers / fibre cards and whether there are any stale paths. I want the awk sytax to only report on the server, disk and stale paths when the string "stale is present" here is a snippit from my report:

Start task on cgcu180a
# START OUTPUT SANCheck
cgcu180a.eu.unilever.com
hwmgr: Refresh component database operation was successful
hwmgr: Refresh component database operation was successful
hwmgr: Refresh component database operation was successful
hwmgr: Refresh component database operation was successful
hwmgr: Refresh SCSI database operation was successful

ADAPTER LINK LINK FABRIC SCSI CARD
HWID: NAME STATE TYPE STATE BUS MODEL
--------------------------------------------------------------------------------
47: emx0 up point-to-point attached scsi3 FCA-2354
49: emx2 up point-to-point attached scsi4 FCA-2354
65: emx3 up point-to-point attached scsi5 FCA-2354
67: emx4 up point-to-point attached scsi6 FCA-2354
--------------------------------------------------------------------------------
STALE Paths
-----------------------
4 PATHS to dsk11132 (HWID:514)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11078 (HWID:517)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11079 (HWID:518)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
2 PATHS to dsk11135 (HWID:519)
2 to SCSI: 6 valid
8 PATHS to dsk3806 (HWID:521)
2 to SCSI: 3 valid
2 to SCSI: 4 valid
2 to SCSI: 5 valid
2 to SCSI: 6 valid
8 PATHS to dsk14001 (HWID:70)
2 to SCSI: 3 valid
2 to SCSI: 4 valid
2 to SCSI: 5 valid
2 to SCSI: 6 valid
8 PATHS to dsk14002 (HWID:71)
2 to SCSI: 3 valid
2 to SCSI: 4 valid
2 to SCSI: 5 valid
2 to SCSI: 6 valid
8 PATHS to dsk14003 (HWID:72)
2 to SCSI: 3 valid
2 to SCSI: 4 valid
2 to SCSI: 5 valid
2 to SCSI: 6 valid
8 PATHS to dsk14004 (HWID:73)
2 to SCSI: 3 valid
2 to SCSI: 4 valid
2 to SCSI: 5 valid
2 to SCSI: 6 valid
10 PATHS to dsk14005 (HWID:74)
2 to SCSI: 3 valid
2 to SCSI: 4 valid
2 to SCSI: 5 stale
2 to SCSI: 5 valid
2 to SCSI: 6 valid
2 PATHS to dsk11137 (HWID:606)
2 to SCSI: 6 valid
4 PATHS to dsk11050 (HWID:406)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11051 (HWID:407)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11052 (HWID:408)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11054 (HWID:410)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11055 (HWID:411)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11056 (HWID:412)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11062 (HWID:415)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11063 (HWID:416)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11064 (HWID:417)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11065 (HWID:418)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11066 (HWID:419)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11070 (HWID:421)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11071 (HWID:422)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
4 PATHS to dsk11072 (HWID:423)
2 to SCSI: 5 stale
2 to SCSI: 6 valid
# END OUTPUT SANCheck
End task on cgcu180a.eu.unilever.com
Start task on cgcu370a.eu.unilever.com
# START OUTPUT SANCheck


so I am looking for the below output only to report on the disk with stale paths

cgcu180a
4 PATHS to dsk11072 (HWID:423)
2 to SCSI: 5 stale
2 to SCSI: 6 valid

I am working this out slowly but not getting very far ....

the problem I have is for awk to identify stale then report the disk section ....

any help is greatly appreciated as always :-)

Thanks

Chris
hello
6 REPLIES 6
James R. Ferguson
Acclaimed Contributor
Solution

Re: awk help to get stale path information

Hi Chris:

# awk '/PATHS/ {LAST=$0};/stale/ {print LAST;print $0;getline;print $0}' file

...or, of course, simple pipe the command's output to the awk script above.

Regards!

...JRF...
lawrenzo_1
Super Advisor

Re: awk help to get stale path information

here is my effort so far:

awk '/START OUTPUT SANCheck/,/END OUTPUT SANCheck/ {if($1 ~ /^cgcu.*$/) print $1};{if($0 ~ /stale/) print}' stuff.dat

cgcu180a.eu.unilever.com
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
2 to SCSI: 5 stale
cgcu370a.eu.unilever.com
2 to SCSI: 0 stale
2 to SCSI: 0 stale
cgcu005a.eu.unilever.com
cgcu007a.eu.unilever.com
cgcu008a.eu.unilever.com
cgcu009a.eu.unilever.com
cgcu010a.eu.unilever.com
cgcu012a.eu.unilever.com
cgcu018a.eu.unilever.com
1 to SCSI: 2 stale

not quite there yet ....
hello
lawrenzo_1
Super Advisor

Re: awk help to get stale path information

ah missed you suggestion James ....

Thanks,

let me see if I can incorporate that with each server listed.

Chris.
hello
James R. Ferguson
Acclaimed Contributor

Re: awk help to get stale path information

Hi (again) Chris:

...and I missed the the host identifier in the output, do:

# awk '/START/ {getline;print};/PATHS/ {LAST=$0};/stale/ {print LAST;print $0;getline;print $0}' file

Regards!

...JRF...
lawrenzo_1
Super Advisor

Re: awk help to get stale path information

Thanks James,

it works a treat ...

I am still working on awk programming but not finding much time however I have come up with some syntax for easier tasks thanks to the information you provide ( and other ITRC users )

so much appreciated!

Chris.
hello
Dennis Handly
Acclaimed Contributor

Re: awk help to get stale path information

>I am still working on awk programming

You could do it like C, if that's a help.

>JRF: print LAST;print $0;getline;print $0

I'm not sure why you are printing one entry after the stale entry. This wouldn't handle stale being last. If there were multiple stale entries, you would repeat the disk.

The following only prints the stale entries:
awk '
BEGIN { last = "" }
/START OUTPUT SANCheck/ {
getline
print $0
}
/PATHS/ {
last = $0
}
/stale/ {
if (last != "") {
print last
last = ""
}
print $0
}' file