The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com



Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
awk and printf xgringo Shell Programming and Scripting 3 04-14-2009 11:23 AM
printf in awk anchal_khare Shell Programming and Scripting 10 04-07-2009 04:41 AM
printf mirusnet Shell Programming and Scripting 4 01-23-2008 10:09 AM
AwK printf question whatisthis UNIX for Dummies Questions & Answers 4 12-10-2007 01:17 PM
printf arunviswanath High Level Programming 2 09-19-2007 10:31 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 06-09-2009
thom.mattson thom.mattson is offline
Registered User
  
 

Join Date: Jun 2009
Posts: 4
IF and awk/printf

Hi Friends,

Scripting newb here. So I'm trying to create a geektool script that uses awk and printf to output certain fields from top (namely command, cpu%, rsize, pid and time, in that order). After much trial and error, I've pretty much succeeded, with one exception. Any process whose name is more than one word, such as system events or system pre..., gets the first word outputted to command ($2), the second outputted to cpu% ($3), cpu% outputted to time ($4) and so on. I'm pretty sure there's a way to fix this so that both words are outputted to the command column using if, but be as I possess very rudimentary scripting skills, I have no idea how to do this. Here's what I have so far:



Code:
top -FR -l2 -ocpu | grep -v ' 0.0% ..:' | awk '{printf( "%-12s %-5s %-5s %-5s %s\n", $2,$3,$10,$1,$4 ) }' | sed -n '15,$p'

Below is what I'm seeing.

Any help would be greatly appreciated.

Thanks,

Thom
Attached Thumbnails
if-awk-printf-picture-1.png  

Last edited by thom.mattson; 06-09-2009 at 09:23 PM..
  #2 (permalink)  
Old 06-09-2009
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2005
Location: Boston, MA
Posts: 5,131
I don't quite follow the dilemma here and I don't have that version of 'top'.
Could you quote the input as it comes to 'awk' (using code tags, please) - no need to attach images.
You can copy/paste the code, select it and click on '#' in the upper bar of the forum message editor.

Also, if you're using 'awk' it's most likely you don't need 'grep'.
  #3 (permalink)  
Old 06-09-2009
thom.mattson thom.mattson is offline
Registered User
  
 

Join Date: Jun 2009
Posts: 4
Sorry if I was unclear. If I understand you correctly (please forgive me if I haven't), the input is something like this:


Code:
Processes:  98 total, 17 running, 3 stuck, 78 sleeping... 442 threads   15:58:34

Load Avg: 12.05, 11.64, 12.16    CPU usage: 73.11% user, 26.89% sys,  0.00% idle
PhysMem:  271M wired, 1048M active,  577M inactive, 1897M used,  151M free.
VM: 61G + 0   146058(0) pageins, 41853(0) pageouts

  PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS RPRVT  RSHRD  RSIZE  VSIZE
66110 GeekTool    11.7%  3:16:32  73   923-     0     0-     0-   55M  1006M 
31858 firefox-bi   5.8% 52:15.57  18   227      0     0-     0-  320M  1273M 
87943 perl         3.7%  0:00.25   1    13      0     0-     0- 5368K   589M 
87902 perl         3.5%  0:00.31   1    14+     0     0-     0- 7104K   590M 
87942 perl         3.0%  0:00.24   1    13      0     0-     0- 5368K   589M 
87941 perl         2.9%  0:00.23   1    13      0     0-     0- 5368K   589M 
   63 coreservic   2.6% 15:55.41   2   243+     0     0-     0-   18M   645M 
66070 WindowServ   2.0% 27:07.05   6   387+     0     0-     0-   84M  1015M 
    0 kernel_tas   1.6% 24:31.65  62     2      0     0-     0   157M  1122M 
   15 distnoted    1.2%  8:31.58   1    66+     0     0-     0-  852K   586M 
66106 Last.fm      0.8%  7:25.17  10   167      0     0-     0-   27M   993M 
87946 top          0.7%  0:00.14   1    32+     0     0-     0- 1016K   586M 
87551 Terminal     0.7%  0:00.42   5   107      0     0-     0- 9532K   927M 
87930 top          0.5%  0:00.19   1    17+     0     0-     0- 1020K   587M 
   11 DirectoryS   0.5%  3:38.61   5    84      0     0-     0- 3380K   589M 
66163 System Eve   0.4%  2:18.47   2    86+     0     0-     0- 6452K   901M

My dilemma is that I can't figure out how to conditionally keep an input (in this case the words System Eve from column 2 of the top process) from being broken up into separate fields when it is outputted via awk and printf.

EDIT:: Just read around some more and it seems like this is is a field separator issue. Given the breaks, any idea what separator I should use?

Last edited by thom.mattson; 06-09-2009 at 09:22 PM..
  #4 (permalink)  
Old 06-10-2009
vgersh99's Avatar
vgersh99 vgersh99 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2005
Location: Boston, MA
Posts: 5,131
Something along these lines...

top -FR -l2 -ocpu | awk -f thom.awk

thom.awk:

Code:
BEGIN {
  tab=sprintf("\t")
  OFS=","
}

function trim(str)
{
    sub("^([ ]*|" tab "*)", "", str);
    sub("([ ]*|" tab "*)" "$", "", str);
    return str;
}

$1 ~ /^[0-9]/ {
  pid=$1
  rest=substr($0,index($0,$2))
  match(rest,"[0-9.]*%")
  name=substr(rest,1, RSTART-1)
  $0=substr(rest,RSTART)
  print trim(name), $1, $8, pid, $2
}


Last edited by vgersh99; 06-10-2009 at 08:19 AM..
Closed Thread

Bookmarks

Tags
awk, geektool, printf

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 07:59 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0