• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 833
  • Last Modified:

Unix Shell script using AWK

$ ps vx | head -1 ; ps vx| egrep –v “idsldap | root” | grep –v PID |sort –rn +3 | head -10

PID TTY      STAT   TIME   MAJFL   TRS       DRS           RSS    % MEM       COMMAND
29403 ?       S        58:12      0         43           2362188   247084    0.7       db2agent (WPS1002) 0                
26440 ?      S        54:30     11        43          1939204    57404      0.1       db2agent (WPS1005) 0                
29417 ?       S        44:44      1         43           2721112   137272    0.4       db2agent (WPS1003) 0                
28698 ?       S        11:59      1         43           2348732   217272    0.6       db2agent (WPS1002) 0                
28228 ?       S          5:51      0         43           2349244   243492    0.7       db2agent (WPS1002) 0                
 4459 ?        S          4:48    111       43           2094192   162412    0.4       db2agent (WPS1004) 0                
 3180 ?       S          4:36      2         43           2720848    50964     0.1       db2agent (WPS1003) 0                
23302 ?      S          4:59      0         43           2721988    187180   0.5       db2agent (WPS1003) 0                
17972 ?       S          4:22      0         43           2720440    173944   0.5       db2agent (WPS1003) 0                
17970 ?        S          4:06      0         43           1939020    51924     0.1       db2agent (idle) 0                    


Hi Unix experts,

 I am looking for a unix shell script which  awks all databases(WPS1002,WPS1003,…..) and sum up the time  and RSS.

Database             Time(cpu)         RSS           %MEM
WPS1002    
WPS1003                  

Thanks,
Ahmed.
0
1981m
Asked:
1981m
  • 3
1 Solution
 
ozoCommented:
| awk '{rss[$11]+=$7;split($4,t,":");time[$11]+=y[0]*60+t[1]}END{for( n in rss ){ printf "%s\t%s\t%d:%02d\n",n,rss[n],time[n]/60, time[n]%60}}'
0
 
1981mAuthor Commented:
Hi ozo,

 This script is partially working, but it is not summing up the time.The time should be in HH:MM:Sec format.

Thanks.
0
 
ozoCommented:
| awk '{rss[$11]+=$7;split($4,t,":");time[$11]+=t[1]*60+t[2]}END{for( n in rss ){ printf "%s\t%s\t%d:%02d\n",n,rss[n],time[n]/60, time[n]%60}}
0
 
ozoCommented:
There was only one : in the times in the example, if there are sometimes one : and sometimes two
awk '{rss[$11]+=$7;s=0;for(n=1;n<=split($4,t,":");n++){s*=60; s+=t[n]}time[$11]+=s}END{for( n in rss ){ printf "%s\t%s\t%d:%02d:%02d\n",n,rss[n],time[n]/60/60, time[n]/60%60,time[n]%60}}'
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now