Visit Our UNIX and Linux User Community


awk if condition help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk if condition help
# 1  
Old 03-28-2012
awk if condition help

Hi, I need little help with awk's if condition statement. I have following code:
Code:
$ ssh myRemotehost 'ps ww -fu tomcat ' | awk ' { if ($1 == "tomcat") print "tomcat (pid " $2 ") is running... "; else print "tomcat stopped or dead" }'

Prints: 

tomcat stopped or dead
tomcat (pid 12345) is running...

if I do the below command, it prints correctly :

Code:
$ ssh myRemotehost 'ps ww -fu tomcat ' | awk ' /tomcat/ { if ($1 == "tomcat") print "tomcat (pid " $2 ") is running... "; else print "tomcat stopped or dead" }'

Prints: 
tomcat (pid 12345) is running...

But the problem is when the tomcat is not detected by the ps command, i do not see any output where in I would like to see that "tomcat stopped or dead"

Can someone please help me refine this.

Thanks in advance.
# 2  
Old 03-28-2012
Put something that runs in the END { } block to print when it's dead or alive. Remember whether anything was found with a variable.

You've got quoting problems happening -- not just single quotes being needed for pipes, but that $1 is probably being interpreted as a shell variable somewhere along the line; the single quotes vanish once it gets to the other side of ssh!

When quoting starts getting that complicated I'd use a here-document and avoid quoting entirely. You can feed entire unmodified shell statement blocks into ssh raw that way, with no special quoting or escaping needed.

Code:
ssh remotehost exec /bin/sh -s <<"EOF"
ps ww -fu tomcat |
        awk '
        # Run this code block whenever $1 == "tomcat"
        $1 == "tomcat" { TOMCAT=$2 }
        END {
                if(TOMCAT) printf("tomcat(%s) is alive\n", TOMCAT);
                else            printf("tomcat stopped or dead\n"); }'
# The EOF here MUST be at the beginning of the line
EOF

# 3  
Old 03-28-2012
What is the output of
Code:
ssh myRemotehost 'ps ww -fu tomcat '

# 4  
Old 03-28-2012
Code:
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
tomcat    3613     1 18 Mar28 ?        Sl   552:53 /usr/bin/java -Djava.util.logging.config.file=/app/apache-tomcat/conf/logging.properties -XX:MaxPermSize=256M -Xms1024m -Xmx1024m -server -javaagent:/app/apache-tomcat/lib/aspectjweaver.jar -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/app/apache-tomcat/endorsed -classpath :/app/apache-tomcat/bin/bootstrap.jar -Dcatalina.base=/app/apache-tomcat -Dcatalina.home=/app/apache-tomcat -Djava.io.tmpdir=/app/apache-tomcat/temp org.apache.catalina.startup.Bootstrap start

---------- Post updated at 04:58 PM ---------- Previous update was at 04:46 PM ----------

Hi Corona688,

what you proposed looks good but when i plug that in my script i get error: "syntax error: unexpected end of file". Not sure how it works

Last edited by Scrutinizer; 03-28-2012 at 10:39 PM.. Reason: Added [Code] tags [/CODE]
# 5  
Old 03-28-2012
Is that EOF at the beginning of the line? It MUST BE at the beginning of the line. If it's not, it won't consider it the end of the here-document, and will eat the entire file then complain about EOF.

When I copy-paste that code into my own shell, it works fine except I don't have a topcat user so ps complains...
# 6  
Old 03-28-2012
Alternatively try:
Code:
ssh myRemotehost 'ps ww -fu tomcat' | awk '/[o]rg.apache.catalina.startup.Bootstrap/{pid=$2} END{if (pid) print "tomcat (pid " pid ") is running..."; else { print "tomcat stopped or dead"; exit 1 }}'

The [o] is not really necessary, since the ps is run on the remote host and awk on the local host, but then you could reuse the code to check on the local host too... I added an exit statement so you can also check the return code..
The check needs to be in the END part like Corona688 suggested, otherwise you cannot conclude that it is not running.

Last edited by Scrutinizer; 03-28-2012 at 11:36 PM..
# 7  
Old 03-29-2012
Thanks both of you for the input / suggestions. It was really helpful. Smilie

Previous Thread | Next Thread
Test Your Knowledge in Computers #74
Difficulty: Easy
NeXTStep was based on the original BSD operating system.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

If condition on awk

Hi All, Would you guys help me? I have a file that consists of several unstructured fields. in this file I will take the code field and count_berry field. but the position of the count_berry field is always changing.the column for code is always structured, which is found in column 6 I have... (4 Replies)
Discussion started by: kivale
4 Replies

2. Shell Programming and Scripting

Using like operator in awk if condition

Hello All, I have developed a script which selects a particular filed from a file ,trims it,searches for a particular pattern and then mail it when found. cat test_file.txt |sed -n '5,$p'|sed -e 's/ //g'|awk -F'|' '{if ($4 !="Alive") print $1,$2,$3,$4}' >> proc_not_alive.txt It is... (4 Replies)
Discussion started by: karthik adiga
4 Replies

3. Shell Programming and Scripting

If Condition in awk

Hi All, I have the below Input: 1 700 1200 400 1300 2 2000 1000 2000 1500 600 3 1400 200 1000 1000 1200 4 1300 500 600 200 I want to modify the field 5 and field 4 as below. If value in field 5 is null then value of field 4 should be in field 5. and then the value of... (12 Replies)
Discussion started by: am24
12 Replies

4. Shell Programming and Scripting

awk condition

Hi Gurus, one of my current script, there is awk statement as below: awk '{a=a?a" "$3:$3}END{for (i in a) print i,a}' I don't understand what's "{a=a?a" "$3:$3}" mean? can anybody give me a brief explaination. thanks in advance. (3 Replies)
Discussion started by: ken6503
3 Replies

5. UNIX for Dummies Questions & Answers

awk - if else condition

Need help in awk command. Need to check 4th column of a file, if it is CAR then awk should print as is and if 4th column is not present, awk should print BIKE Input File content : 1,abc,55,CAR 3,bb,dd,CAR 5,ddd,tttt 8,ee,55 --------------------- Out put will look like: 1,abc,55,CAR... (6 Replies)
Discussion started by: vegasluxor
6 Replies

6. Shell Programming and Scripting

awk - Division with condition

Hi Friends, I have an input file like this cat input chr1 100 200 1 2 chr1 120 130 na 1 chr1 140 160 1 na chr1 170 180 na na chr1 190 220 0 0 chr1 220 230 nd 1 chr2 330 400 1 nd chr2 410 450 nd nd chr3 500 700 1 1 I want to calculate the division of 4th and 5th columns. But, if... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

7. Shell Programming and Scripting

HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts, I'm stuck with this script for three days now. Here's what i need. I need to split a large delimited (,) file into 2 files based on the value present in the last field. Samp: Something.csv bca,adc,asdf,123,12C bca,adc,asdf,123,13C def,adc,asdf,123,12A I need this split... (6 Replies)
Discussion started by: shell_boy23
6 Replies

8. Shell Programming and Scripting

awk with multiple condition

Hi Guys, I just wanted to print all the lines execpt 1st and 3rd line. For that i wrote a awk command, awk 'NR != 1 || NR != 3 {print $0}' c.out the command is working if i give an equal to instead of not equal to. In the case of not equal to, it gives me the entire file. Can you... (18 Replies)
Discussion started by: mac4rfree
18 Replies

9. Shell Programming and Scripting

Problem with IF condition in awk

Hi all; I'm stuck with this simple awk script,i need to group the lines which the position of 28 length 3 that contains "688" into 1 group and other than "688" into another group. My problem is the script only read other than "688" and ignores the lines which contains "688". The file look... (2 Replies)
Discussion started by: ashikin_8119
2 Replies

10. Shell Programming and Scripting

awk and condition help

Hi... i just want to write a script for the follwing command "display status" and the normal output is... AN100> display status 12.13.2006 12:03:25 AN-2000-1 CC NOT PRESENT 16.50.80.49 status: Status for PACKET GLI A in the TOP / LEFT shelf of frame 0: status: The current active LAN is... (5 Replies)
Discussion started by: gini
5 Replies

Featured Tech Videos