If statement in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting If statement in awk
# 1  
Old 06-12-2014
If statement in awk

I run my script "switch.sh" repeatedly (within 30 seconds). Each time script is triggered, script itself should kill all previous process.

Here is my code:
Code:
for pid in $(ps -fe | grep 'switch.sh' | grep -v grep | awk '{if ($2<$$) print $2}'); do
         sudo kill -9 $pid
done

sleep 30

I can't figure out, why this can't work. The problem is awk '{if ($2<$$) print $2}. If I use numbers instead of $$ then it works, but if I use variables, then if statement doesn't work. I also try with variable instead of $$ but with no luck

Any suggestions?
Thanks.

Last edited by armatron; 06-12-2014 at 03:46 AM..
# 2  
Old 06-12-2014
$$ is special variable of the shell (not of awk). Shell's variable are not visible inside awk (the way you have used in your code).

You may want to consider

Code:
awk -v pid=$$ '{if ($2<pid) print $2}'

This User Gave Thanks to clx For This Post:
# 3  
Old 06-12-2014
In addition, I would consider using $2!=pid, since at some point, the numbering of processes may start anew, so an earlier process is not always guaranteed to have a lower number..
This User Gave Thanks to Scrutinizer For This Post:
# 4  
Old 06-12-2014
Here is a simpler way assuming pgrep is available on your OS :
Code:
for pid in $(pgrep switch.sh) ; do
    [ $pid != $$ ] && sudo kill $pid
done
sleep 30

Notes:
- You might need to use "pgrep -f switch.sh" depending on how this script is called.
- Avoid using "killl -9" unless you have valid reasons (and there are not much of them) to do so
# 5  
Old 06-12-2014
If pkill is avaliable.
First: store your pid.
Code:
#!/bin/bash
switch.sh &
echo $! >/path/to/pid.file

Second: if still alive use pkill:
Code:
       -P ppid,...
              Only match processes whose parent process ID is listed.

# 6  
Old 06-12-2014
Quote:
Originally Posted by Scrutinizer
In addition, I would consider using $2!=pid, since at some point, the numbering of processes may start anew, so an earlier process is not always guaranteed to have a lower number..
I noticed that, thanks. I also try with !=, but since I would trigger script very fast, even before previous script finish kill process, then somehow previous triggered script can kill next triggered script.
# 7  
Old 06-12-2014
Quote:
Originally Posted by armatron
I noticed that, thanks. I also try with !=, but since I would trigger script very fast, even before previous script finish kill process, then somehow previous triggered script can kill next triggered script.
OK, I see what you mean. I guess the best method would be to record the pids of the processes as suggested earlier in this thread and use those to kill the processes.

Do these processes need to govern themselves? Perhaps it would be better to have a parent process who regulates its children and that can be triggered to fire off the next child only after killing any previous child processes first?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk statement help

There has to be a way to do this with awk or maybe I'm just focusing on the wrong tool and making this harder than it needs to be. I'm trying to do a file field lookup/join at a very large scale but the output changes has to change dramatically. I have an input file to do a field lookup from and... (3 Replies)
Discussion started by: brettcasper
3 Replies

2. Shell Programming and Scripting

Convert Update statement into Insert statement in UNIX using awk, sed....

Hi folks, I have a scenario to convert the update statements into insert statements using shell script (awk, sed...) or in database using regex. I have a bunch of update statements with all columns in a file which I need to convert into insert statements. UPDATE TABLE_A SET COL1=1 WHERE... (0 Replies)
Discussion started by: dev123
0 Replies

3. Shell Programming and Scripting

awk if then else statement

I am using awk as part of and if then else statement. I am trying to have the user enter a gene name and then a variant or variants and have a specific transcript assigned to the variants depending on the gene. Below is my code but the if then else statement is wrong. Basically, the gene name... (2 Replies)
Discussion started by: cmccabe
2 Replies

4. Shell Programming and Scripting

Help with awk statement

Hi I have a file with test test2 1000000657373 test1 test3 1000003849450 test2 test4 test5 100000837474 I cat the file and pipe it to an awk statement like so cat /tmp/file |awk '{if ($3 ~ "^*$" && $3 > 1024000000) print "/vol/"$1"/"$2;else if ($4 ~ "^*$" && $4 > 1024000000) print... (15 Replies)
Discussion started by: bombcan
15 Replies

5. Shell Programming and Scripting

awk if statement

hi, I have a l-column file of more than 10,000 lines with interspersed negative values. What I want to do is add a fixed number (360) everytime a negative value is encountered while leaving the positive ones as is. I need something that will read every line of the file and do the calculation... (3 Replies)
Discussion started by: ida1215
3 Replies

6. Shell Programming and Scripting

Help Regarding AWk and IF THEN ELSE Statement

Hi, I have a data file which contains record count. So doing wc -l rightfit_balancing_count.dat | awk '{print $1}'] gives me the record count stored in the file. Now, i want to send a mail from UNIX, if the record count is equal to 0,otherwise it should do nothing. Any help... (2 Replies)
Discussion started by: Shell_Learner
2 Replies

7. Shell Programming and Scripting

Awk 'if' statement help

Hello all, I'm very new to this (<5hrs!) please bear with me. My file looks like this 386259.448541 417069.155 154935.157 186.206 162 1 1 8 386259.448551 417068.53 154935.04 186.144 156 1 1 8 386259.448561 417067.911 154934.926 186.175 164 1 1 8 386259.450337 417086.643 154946.483 894.671... (4 Replies)
Discussion started by: rebeccab37
4 Replies

8. Shell Programming and Scripting

awk, if statement

Having a little trouble with awk and an if statement. I have a test setup which I am trying to only print the records which start with the month 03. Everything I tried, prints everything, even the 02 month 03/23/2010 12:47:51 ga2828 SUBMITTED FROM URL: test123.cgi show port count ... (2 Replies)
Discussion started by: numele
2 Replies

9. Shell Programming and Scripting

awk inside another awk statement

hi all, i have two files 1) a.txt one two three 2) abc "one" = 10 pqr "three" = 20 345 "two" = 0 this is what i want in third file (3 Replies)
Discussion started by: shishirkotkar
3 Replies

10. UNIX for Dummies Questions & Answers

if statement in awk

Hi Friends How do I do two things from one if statement inside awk? I want to run a script and create a new file from the same condition. awk '{ if ($2 == ""){print " "|"cd /local/test; ./script.ksh"}{cat > ran_true.txt}}' $IN_FILE Bolded are the two things I want to be done. Thanks (1 Reply)
Discussion started by: UNovIX
1 Replies
Login or Register to Ask a Question