awk compound statements


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk compound statements
# 1  
Old 07-13-2006
Error awk compound statements

how can i use two or multiple statements in the if part
of an awk code

for example
i want to check two flag if they are true i will write some print
operations and increase the counter.
here is the c version of the code that i want to write:

counter=0;
if (flag1==1 && flag2==0) {
printf("true\n");
counter=counter+1;
flag1=0;
}
else
printf("false");


how can i do the same operation using awk?
# 2  
Old 07-13-2006
just like you said.......
# 3  
Old 07-14-2006
Error

i dont think that, its just like i said.
(at least i couldnt make it work)

let me ask my question with a different example.
i wrote an awk code as follows,
and i cannot make it work, my guess is: the problem stems from
the compund statements. whats wrong with this code?

for file in TESTFILE*; do
counter1=0;
counter2=0;
awk -F" " '{ if ( $1 = /flag1/ ) { print "TRUE"; $2="true"; counter1=$counter1+1}
else { print "FALSE"; counter2=$counter2+1 }}' $file>testfileoutput
done
print $counter1
print $counter2
# 4  
Old 07-14-2006
Awk tests in the form

Code:
$1 == "foo" && $2 == "bar"

are perfectly acceptable, as is
Code:
$1 ~ /^foo$/ && $2 ~ /^bar$/

Check out http://www.vectorsite.net/tsawk2.html#m3. That should help you.
# 5  
Old 07-14-2006
Quote:
Originally Posted by gfhgfnhhn
i dont think that, its just like i said.
(at least i couldnt make it work)

let me ask my question with a different example.
i wrote an awk code as follows,
and i cannot make it work, my guess is: the problem stems from
the compund statements. whats wrong with this code?

for file in TESTFILE*; do
counter1=0;
counter2=0;
awk -F" " '{ if ( $1 = /flag1/ ) { print "TRUE"; $2="true"; counter1=$counter1+1}
else { print "FALSE"; counter2=$counter2+1 }}' $file>testfileoutput
done
print $counter1
print $counter2
if you're hoping to see SHELL vars being incremented and exported from 'awk' and being seen in SHEEL after the end of the loop... that is NOT how it works.

Also your increment [counter1=$counter1+1] withIN the awk is NOT what you THINK it's supposed to do.

Code:
#!/bin/ksh
for file in TESTFILE*; do
    counter1=0;
    counter2=0;
    eval $(nawk -v out='testfileoutput -v counter1="${counter1}" -v counter2="${counter2}" '{ 
          if ( $1 = /flag1/ ) { 
             print "TRUE" > out 
             $2="true";
             counter1++
          }
          else {
             print "FALSE" > out
             counter2++
          }
     }
     END {
         printf("export counter1=%d\nexport counter2=%d\n", counter1, counter2)
     }' $file )
done
print $counter1
print $counter2


Last edited by vgersh99; 07-14-2006 at 01:02 PM..
# 6  
Old 07-15-2006
Quote:
Originally Posted by vgersh99
if you're hoping to see SHELL vars being incremented and exported from 'awk' and being seen in SHEEL after the end of the loop... that is NOT how it works.

Also your increment [counter1=$counter1+1] withIN the awk is NOT what you THINK it's supposed to do.

Code:
#!/bin/ksh
for file in TESTFILE*; do
    counter1=0;
    counter2=0;
    eval $(nawk -v out='testfileoutput -v counter1="${counter1}" -v counter2="${counter2}" '{ 
          if ( $1 = /flag1/ ) {

Perhaps $1 ~ /flag1/.
Quote:
Code:
             print "TRUE" > out 
             $2="true";

After this assignment, is $2 or $0 ever used?
Quote:
Code:
             counter1++
          }
          else {
             print "FALSE" > out
             counter2++
          }
     }
     END {
         printf("export counter1=%d\nexport counter2=%d\n", counter1, counter2)
     }' $file )
done
print $counter1
print $counter2

# 7  
Old 07-17-2006
Error

thanks for your replies
but there is one more thing that i want to ask

eval $(nawk -v out='testfileoutput -v counter1="${counter1}" -v counter2="${counter2}" '

why i cannot use the above line as follows:

eval $(nawk '-v out=testfileoutput -v counter1="${counter1}" -v counter2="${counter2}" '


i moved the first single quote to just after nawk, before -v
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Count lines with awk if statements

Hi Everybody, I wanna count lines in many files, but only if they meet a condition, I have something like this, cat /path1/usr/STAT/GPRS/ESTCOL_GPRS_2016* | awk 'BEGIN{FS=",";}{ if (substr($5,1,8)=='$DATE'){a++} END{for(i in a)print a}}' DATE=$(date +%Y%m%d -d "1 day ago") But it has... (6 Replies)
Discussion started by: Elly
6 Replies

2. Shell Programming and Scripting

awk with many if statements

Hi What is the right structure to use awk with multiple If statements The following code doesn't work # awk ' { A = $1 } END { for ( i = 1; i <= c; i++ ) { if ( A == 236 && A ==199... (7 Replies)
Discussion started by: khaled79
7 Replies

3. Shell Programming and Scripting

Nested awk Statements

Hello again everyone, yes, I'm back again for more help! So I'm attempting to read two separate files and generate some XML code from that. My current code is: BEGIN { print "<?xml version=\"1.0\" encoding=\"utf-8\">" print "<Export>" } { x=1; print "<section name=\"Query" NR "\">"... (5 Replies)
Discussion started by: Parrakarry
5 Replies

4. Shell Programming and Scripting

awk problem - combining awk statements

i have a datafile that has several lines that look like this: 2,dataflow,Sun Mar 17 16:50:01 2013,1363539001,2990,excelsheet,660,mortar,660,4 using the following command: awk -F, '{$3=strftime("%a %b %d %T %Y,%s",$3)}1' OFS=, $DATAFILE | egrep -v "\-OLDISSUES," | ${AWK} "/${MONTH} ${DAY}... (7 Replies)
Discussion started by: SkySmart
7 Replies

5. UNIX for Dummies Questions & Answers

Combine two awk statements into one

Hi, I have the following two awk statements which I'd like to consolidate into one by piping the output from the first into the second awk statement (rather than having to write kat.txt out to a file and then reading back in). awk 'BEGIN {FS=OFS=" "} {printf("%s ", $2);for (x=7; x<=10;... (3 Replies)
Discussion started by: kasan0
3 Replies

6. UNIX for Dummies Questions & Answers

AWK w/ if statements failing.

I'm converting some code from ksh on my macbook (Version M 1993-12-28 s+) to an older solaris machine with ksh 88. I can't seem to figure out this line, it worked on the new shell version. set -A combo -- $(for x in ${ImageIDs}; do nawk -v s=$x 'if($2 == s) getline ; getline if ($1 ==... (2 Replies)
Discussion started by: nerdcurious
2 Replies

7. Shell Programming and Scripting

Combining AWK statements

Hello UNIX Community, I have file that contains the following data: testAwk2.csv rabbit penguin goat giraffe emu ostrich hyena elephant panda dog cat pig lizard snake antelope platypus tiger cheetah lion rhino spider I then find the character length of the... (1 Reply)
Discussion started by: vnayak
1 Replies

8. Shell Programming and Scripting

Combining awk statements

I have a pretty simple script below: #!/bin/sh for i in *.cfg do temp=`awk '/^InputDirectory=/' ${i}` input_dir=`echo ${temp} | awk '{ print substr( $0, 16) }'` echo ${input_dir} done As you can see its opening each cfg file and searching for the line that has "InputDirectory="... (3 Replies)
Discussion started by: ssbsts
3 Replies

9. Shell Programming and Scripting

Combine awk statements

I have an awk statement that works but I am calling awk twice and I know there has to be a way to combine the two statements into one. The purpose is to pull out just the ip address from loopback1. cat config.txt | nawk 'BEGIN {FS="\n"}{RS="!"}{if ( $0 ~ "interface loopback1" ) print$4}' | nawk... (5 Replies)
Discussion started by: numele
5 Replies

10. Shell Programming and Scripting

Help a newbie please with awk if else statements

Hi, Despite reading the Conditional Statements chapter in the O'Reilly Sed & Awk book several times and looking at numerous examples, I cannot for the life of me get any kind of if ... else statement to work in my awk scripts! My scripts work perfectly (as they are written at least) and do what... (4 Replies)
Discussion started by: jonathanm
4 Replies
Login or Register to Ask a Question