awk Script to format output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk Script to format output
# 1  
Old 09-10-2014
Question awk Script to format output

Hi all,

I'm fairly new to this and learning along the way, so bare with me...

I'm trying to format the output from a script to be more read-friendly.

The output contains more servers and more processes but for as example it will do:
Code:
Server: Test1
                                   
 Name                    State     
 ---------------------------------
  Process a                Running  
  Process b                Running  
  
 Server: Server1
                                  
 Name                    State    
 ---------------------------------
  Process a                Running  
  Process d                Suspended
  
  
 Server: Server2
                                  
 Name                    State    
 ---------------------------------
  Process C               Running  
  Process F               Running

I'm trying to build a AWK script that loops for each server and checks if every process state is running. If the processes are all running the script should print "OK", if one process got a different state is should print a error for that server.

AWK output should be something like this:
Code:
Test1 OK
Server1 ERROR/SUSPENDED
Server2 OK

So far I have very little, I cant even get the loop to work....
# 2  
Old 09-10-2014
An awk script always loops over each line $0, each time splitting the words into $1, $2, ... $NF
Code:
awk '
$1=="Server:" {
  if (result) { print server,result }
  server=$2
  result="NONE"
}
$1=="Process" {
  if ($NF=="Running") { if (result=="NONE") { result="OK" } } else { result="ERROR/"$NF }
}
END {
  if (result) { print server,result }
}
'


Last edited by MadeInGermany; 09-12-2014 at 09:24 AM.. Reason: bug fix: if (result=="NONE")
This User Gave Thanks to MadeInGermany For This Post:
# 3  
Old 09-12-2014
Thanks for the reply!

The code you posted is giving me a syntax error on the first result="NONE". I tried to fix it but I cant make it work so I went in a different direction.

Breaking it down to smaller parts so its easier for me to understand.

Code:
awk '$1=="Server:" {  
if ($1=="Server:") {print server}  
server=$2 
} 
END {
print server
} '

Is giving me all the servers names.

Code:
awk '
$1=="Server:" {  
if ($1=="Server:") {print server}  
server=$2 
} 
$2=="Running" { 
countrunning[$2]++
} 
$2=="Suspended" { 
countsusp[$2]++
}  
END {
print server; 
for (num1 in countrunning) print num1,  countrunning[num1] ; 
for (num2  in countsusp) print num2, countsusp[num2]
} '

Is giving me all servers and a count of processes with state running and suspended regardless on what server it runs. I cannot use S1="Process" to identify the processes because the actual names are random (not starting whit process).

Im trying to make the output of the script so that the state of processes are counted for each server.
# 4  
Old 09-12-2014
That looks like "Suspended" is the only error state in your file. Try
Code:
awk     '/^ *Server:/   {if (NR>1) print RCNT==CNT?"OK: "RCNT:"Suspended: "SCNT
                         printf "%s: ", $NF
                         RCNT=SCNT=CNT=0}
         $NF ~ /^Run/   {RCNT++; CNT++}
         $NF ~ /^Sus/   {SCNT++; CNT++}
         END            {print RCNT==CNT?"OK: "RCNT:"Error: "SCNT}
        ' file
Test1: OK: 2
Server1: Suspended: 1
Server2: OK: 2

# 5  
Old 09-12-2014
I have fixed a bug in my previous post: added a missing =.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script to generate Excel file or to SQL output data to Excel format/tabular format

Hi , i am generating some data by firing sql query with connecting to the database by my solaris box. The below one should be the header line of my excel ,here its coming in separate row. TO_CHAR(C. CURR_EMP_NO ---------- --------------- LST_NM... (6 Replies)
Discussion started by: dani1234
6 Replies

2. Shell Programming and Scripting

Adjusting my awk output format

I've been diving into awk but still learning how to use it for text formatting. Below you can see my results are separated by a comma. Can somebody show me how to separate by TAB as well? An explanation would be appreciated as I did not comprehend the answer in the man pages and would like to gain... (1 Reply)
Discussion started by: sudo
1 Replies

3. Shell Programming and Scripting

Format output using awk

Hello all , need help with this ... Input File DEV % POOL 0CB4 FBA 2211300 81792 4 IE RAID-5(3+1) R5_EFD100_1 - - 1805376 82 IF RAID-1 M2_FC300_1 - ... (4 Replies)
Discussion started by: greycells
4 Replies

4. UNIX for Dummies Questions & Answers

after awk-> format output

hi i have a awk command with several querys.... awk 'FS="|""; print $4, $5, $6...etc.... $4 gives me the date 20120304 $5 is timestamp 101023 I want to format these in 2012.03.04 or 2012/03/04 10:10:23 but have no idea, if this is possible with format-parameters in the awk... (2 Replies)
Discussion started by: Jazzmatazz
2 Replies

5. Shell Programming and Scripting

awk to format an output

awk experts, I have in put file with time stamp followed by "," separated data. same patern continues. The output need time stamp in first columns and data total in 2nd columns. Input file T 9:15 d0,1,3,3 d1,2,1,1 d2,3,1,5 e1,1,1,1 T 9:30 d0,1,1,1 d1,2,3,2 d3,1,2,1... (10 Replies)
Discussion started by: arv_cds
10 Replies

6. Shell Programming and Scripting

awk - format output

Input file1 zone: BAU_SERVER1 C0:50:76:01:C6:20:00:12; 50:06:01:69:3B:20:14:8B; 50:06:01:60:3B:20:14:8B zone: BAU_SERVER2 C0:50:76:01:C6:20:00:08; 50:06:01:69:3B:20:14:8B; 50:06:01:60:3B:20:14:8B zone: ... (4 Replies)
Discussion started by: greycells
4 Replies

7. Shell Programming and Scripting

scripting/awk help : awk sum output is not comming in regular format. Pls advise.

Hi Experts, I am adding a column of numbers with awk , however not getting correct output: # awk '{sum+=$1} END {print sum}' datafile 2.15291e+06 How can I getthe output like : 2152910 Thank you.. # awk '{sum+=$1} END {print sum}' datafile 2.15079e+06 (3 Replies)
Discussion started by: rveri
3 Replies

8. Shell Programming and Scripting

Format output using awk in script.

Guys, I have a script which hits the database and pulls the information that I need into files. Now I want to format these files to make them easy to read. The sample format of the file will be like.... <Start_of_File> Header1 .....xsdfsfa...adfa...... Header2 ....afefas .aefaefsdf...... (8 Replies)
Discussion started by: bperl
8 Replies

9. Shell Programming and Scripting

[need help] output format from awk

hi all, i have a problem with my nawk command output below is the description : nawk $12 == "00008001" { cnt++;cs_cd } END {for(cd in cs_cd) print cd, cs_cd } 2007020814.TDR output : 133 123 desire output: 133,123,.... please advices thank you so much (6 Replies)
Discussion started by: bucci
6 Replies

10. Shell Programming and Scripting

Output in a particular format using AWK

Hi All, I am trying to check if if column 5 is greater than 90. If greater it will print the term in column 6, else if all are within limit, then it will output "Size is within limit". I can't seem to do that with the below code. The output should only be 1 statement of "Size is within the... (4 Replies)
Discussion started by: Raynon
4 Replies
Login or Register to Ask a Question