1820751 Members
3582 Online
109627 Solutions
New Discussion юеВ

Scripting help required

 
SOLVED
Go to solution

Scripting help required

Hi,
All,
Please find the content of the file below.I want to extract the field CPU UTIL having the maximum value along with the time stamp which is just 1 line above it.

The content of file is as follows.

---------------------------------------------
Reading at Mon Aug 8 00:00:00 IST 2005

CPU UTIL 36.0
GBL MEM UTIL 50.3
GBL DISK PEAK UTIL 100.0
CPU UTIL 42.7
GBL MEM UTIL 50.3
GBL DISK PEAK UTIL 99.1
Reading at Mon Aug 8 00:30:00 IST 2005

CPU UTIL 31.6
GBL MEM UTIL 50.7
GBL DISK PEAK UTIL 100.0
CPU UTIL 36.9
GBL MEM UTIL 50.7
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 01:00:01 IST 2005

CPU UTIL 38.9
GBL MEM UTIL 51.2
GBL DISK PEAK UTIL 100.0
CPU UTIL 42.9
GBL MEM UTIL 51.2
GBL DISK PEAK UTIL 89.8
Reading at Mon Aug 8 01:30:01 IST 2005

CPU UTIL 44.8
GBL MEM UTIL 51.5
GBL DISK PEAK UTIL 100.0
CPU UTIL 45.1
GBL MEM UTIL 51.5
GBL DISK PEAK UTIL 86.3
Reading at Mon Aug 8 02:00:00 IST 2005

CPU UTIL 40.5
GBL MEM UTIL 50.2
GBL DISK PEAK UTIL 100.0
CPU UTIL 41.4
GBL MEM UTIL 50.2
GBL DISK PEAK UTIL 70.7
Reading at Mon Aug 8 02:30:00 IST 2005

CPU UTIL 36.8
GBL MEM UTIL 49.5
GBL DISK PEAK UTIL 100.0
CPU UTIL 38.1
GBL MEM UTIL 49.4
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 03:00:00 IST 2005

CPU UTIL 35.1
GBL MEM UTIL 49.7
GBL DISK PEAK UTIL 100.0
CPU UTIL 29.8
GBL MEM UTIL 49.7
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 03:30:01 IST 2005

CPU UTIL 46.8
GBL MEM UTIL 50.2
GBL DISK PEAK UTIL 100.0
CPU UTIL 42.9
GBL MEM UTIL 50.3
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 04:00:01 IST 2005

CPU UTIL 33.1
GBL MEM UTIL 50.1
GBL DISK PEAK UTIL 100.0
CPU UTIL 24.2
GBL MEM UTIL 50.1
GBL DISK PEAK UTIL 99.3
Reading at Mon Aug 8 04:30:00 IST 2005

CPU UTIL 31.3
GBL MEM UTIL 50.1
GBL DISK PEAK UTIL 100.0
CPU UTIL 30.3
GBL MEM UTIL 50.1
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 05:00:00 IST 2005

CPU UTIL 25.2
GBL MEM UTIL 50.5
GBL DISK PEAK UTIL 100.0
CPU UTIL 33.5
GBL MEM UTIL 50.5
GBL DISK PEAK UTIL 99.3
Reading at Mon Aug 8 05:30:00 IST 2005

CPU UTIL 16.0
GBL MEM UTIL 50.9
GBL DISK PEAK UTIL 100.0
CPU UTIL 24.4
GBL MEM UTIL 50.9
GBL DISK PEAK UTIL 85.8
Reading at Mon Aug 8 06:00:00 IST 2005

CPU UTIL 19.5
GBL MEM UTIL 50.8
GBL DISK PEAK UTIL 100.0
CPU UTIL 37.8
GBL MEM UTIL 50.8
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 06:30:01 IST 2005

CPU UTIL 50.0
GBL MEM UTIL 50.2
GBL DISK PEAK UTIL 95.2
CPU UTIL 43.2
GBL MEM UTIL 50.2
GBL DISK PEAK UTIL 91.6
Reading at Mon Aug 8 07:00:00 IST 2005

CPU UTIL 36.1
GBL MEM UTIL 50.9
GBL DISK PEAK UTIL 100.0
CPU UTIL 33.8
GBL MEM UTIL 50.9
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 07:30:00 IST 2005

CPU UTIL 28.1
GBL MEM UTIL 50.9
GBL DISK PEAK UTIL 100.0
CPU UTIL 30.3
GBL MEM UTIL 50.8
GBL DISK PEAK UTIL 88.1
Reading at Mon Aug 8 08:00:00 IST 2005

CPU UTIL 52.3
GBL MEM UTIL 50.9
GBL DISK PEAK UTIL 100.0
CPU UTIL 49.1
GBL MEM UTIL 50.8
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 08:30:01 IST 2005

CPU UTIL 43.5
GBL MEM UTIL 50.8
GBL DISK PEAK UTIL 100.0
CPU UTIL 48.1
GBL MEM UTIL 50.8
GBL DISK PEAK UTIL 93.3
Reading at Mon Aug 8 09:00:00 IST 2005

CPU UTIL 33.8
GBL MEM UTIL 51.4
GBL DISK PEAK UTIL 100.0
CPU UTIL 24.7
GBL MEM UTIL 51.3
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 09:30:00 IST 2005

CPU UTIL 25.9
GBL MEM UTIL 52.5
GBL DISK PEAK UTIL 100.0
CPU UTIL 28.4
GBL MEM UTIL 52.5
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 10:00:00 IST 2005

CPU UTIL 56.9
GBL MEM UTIL 56.2
GBL DISK PEAK UTIL 100.0
CPU UTIL 49.7
GBL MEM UTIL 56.2
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 10:30:00 IST 2005

CPU UTIL 57.5
GBL MEM UTIL 57.6
GBL DISK PEAK UTIL 100.0
CPU UTIL 51.4
GBL MEM UTIL 57.6
GBL DISK PEAK UTIL 100.0
Reading at Mon Aug 8 11:00:00 IST 2005

CPU UTIL 63.4
GBL MEM UTIL 60.5
GBL DISK PEAK UTIL 100.0
CPU UTIL 69.8
GBL MEM UTIL 60.4
GBL DISK PEAK UTIL 100.0
7 REPLIES 7
Alex Lavrov.
Honored Contributor

Re: Scripting help required

The first thing that comes to my head is:

cat output.file | grep "CPU UTIL" | awk '{print $3}' | sort -n | tail -1


Explanation:
1) Cat the file content
2) Filter only the "CPU UTIL" lines
3) Cut from there only the number
4) Sort the number is asc oreder
5) Show me the last line <- maximum number.


Alex.
I don't give a damn for a man that can only spell a word one way. (M. Twain)

Re: Scripting help required

Alex,
Thanks.
cat output.file | grep "CPU UTIL" | awk '{print $3}' | sort -n | tail -1.
This gives me the the max value.now my requirement is to get the timestamp that is the date which is in the file just a line above.
How to do that ?
This is the actual requirement.

Thanks
H.Merijn Brand (procura
Honored Contributor

Re: Scripting help required

In that command, please NEVER use step 1

# grep "CPU UTIL" output.file | awk '{print $3}' | sort -n | tail -1

It's a plain waste of system resources
Perl can do it in a single command

# perl -ne'print+(sort{$b<=>$a}grep s/CPU UTIL //,<>)[0]' output.file

Enjoy, Have FUN! H.Merijn
Enjoy, Have FUN! H.Merijn
Muthukumar_5
Honored Contributor

Re: Scripting help required

You can do this as,

Put this information into a log file called test.log.

# grep -E 'Reading|CPU UTIL' test.log | awk 'NR%3==1 { print $0;getline;split($0,a);getline;split($0,b); if ( a[3] > b[3] ) { print "CPU UTIL ",a[3];} else { print "CPU UTIL ",b[3];} }'

Reading at Mon Aug 8 00:00:00 IST 2005
CPU UTIL 42.7
Reading at Mon Aug 8 00:30:00 IST 2005
CPU UTIL 36.9
Reading at Mon Aug 8 01:00:01 IST 2005
CPU UTIL 42.9
Reading at Mon Aug 8 01:30:01 IST 2005
CPU UTIL 45.1
Reading at Mon Aug 8 02:00:00 IST 2005
CPU UTIL 41.4
Reading at Mon Aug 8 02:30:00 IST 2005
CPU UTIL 38.1
Reading at Mon Aug 8 03:00:00 IST 2005
CPU UTIL 35.1
Reading at Mon Aug 8 03:30:01 IST 2005
CPU UTIL 46.8
Reading at Mon Aug 8 04:00:01 IST 2005
CPU UTIL 33.1
Reading at Mon Aug 8 04:30:00 IST 2005
CPU UTIL 31.3
Reading at Mon Aug 8 05:00:00 IST 2005
CPU UTIL 33.5
Reading at Mon Aug 8 05:30:00 IST 2005
CPU UTIL 24.4
Reading at Mon Aug 8 06:00:00 IST 2005
CPU UTIL 37.8
Reading at Mon Aug 8 06:30:01 IST 2005
CPU UTIL 50.0
Reading at Mon Aug 8 07:00:00 IST 2005
CPU UTIL 36.1
Reading at Mon Aug 8 07:30:00 IST 2005
CPU UTIL 30.3
Reading at Mon Aug 8 08:00:00 IST 2005
CPU UTIL 52.3
Reading at Mon Aug 8 08:30:01 IST 2005
CPU UTIL 48.1
Reading at Mon Aug 8 09:00:00 IST 2005
CPU UTIL 33.8
Reading at Mon Aug 8 09:30:00 IST 2005
CPU UTIL 28.4
Reading at Mon Aug 8 10:00:00 IST 2005
CPU UTIL 56.9
Reading at Mon Aug 8 10:30:00 IST 2005
CPU UTIL 57.5
Reading at Mon Aug 8 11:00:00 IST 2005
CPU UTIL 69.8

let us know if you need some other format of output.

hth.
Easy to suggest when don't know about the problem!
H.Merijn Brand (procura
Honored Contributor
Solution

Re: Scripting help required

But that reply was just a comment on the process before it, that did not show the time stamp.

perl -nle'chomp;s/^Reading at // and$t=$_;s/^CPU UTIL // and$c{$_}=$t}END{@t=sort{$b<=>$a}keys%c;print"$c{$t[0]}: $t[0]"' output.file

Enjoy, Have FUN! H.Merijn
Enjoy, Have FUN! H.Merijn
Muthukumar_5
Honored Contributor

Re: Scripting help required

If you want to have only the maximum then,

# grep -E 'Reading|CPU UTIL' test.log | awk 'NR%3==1 { printf $0;getline;split($0,a);getline;split($0,b); if ( a[3] > b[3] ) { print " CPU UTIL ",a[3];} else { print " CPU UTIL ",b[3];} }' | sort -k 11,11 | tail -1

hth.
Easy to suggest when don't know about the problem!

Re: Scripting help required

Thanks MuthuKumar and H.Merijn

The response was amazing.

Thanks for all your support.