How can I cut the process time (201) from the above process line?
I did the following ..but unsuccess.
ProcTime=`echo $txtline|awk -F" " '{print($11)}'|awk -F":" '{print($1)}'`
b'cos sometimes I get the following for today's or fresh processes
-
root 12797 1 TS 70 0 12:58:46 pts/7 01:01 mfe4ppm klP410 34
In this case I want to have 01 processor time.
Test for the number of words in your txtline variable. Something like:
if there are 13 words in the line, print out the 10th field else if
there are 12 words in the line, print out the 9th field. Pretty simple
to implement.
Word 9 or word 10 will be the process time, so you can grab the one that contains a colon. All 3 solutions below grab word 9 or 10, but then each takes a different approach on how to get the minutes only and not the seconds.
echo $txtline |
awk '{$0=(match($10,":"))?$10:$9;FS=":";print $1}' |
read ProcTime
echo "ProcTime=$ProcTime"
echo $txtline |
awk '{x=(match($10,":"))?$10:$9;y=substr(x,1,index(x,":")-1);print
y}' |
read ProcTime
echo "ProcTime=$ProcTime"
echo $txtline |
awk '{x=(match($10,":"))?$10:$9;sub(":"," ",x);print x}' |
read ProcTime ProcSec
The first solution changes the field separator to a colon to print the minutes.
The second solution pulls the minutes from the processing time by using substring function.
The third solution puts processing time into variable x and changes the colon to a space. Since x prints as two words, the read statement following awk must read into two variables. If you read into just one variable, both words would go into that one.
Quick Links:
Do you have
a UNIX Question?
Unix Home: Unix System Administration
Hints and Tips