awk problem - combining awk statements


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk problem - combining awk statements
# 1  
Old 03-19-2013
awk problem - combining awk statements

i have a datafile that has several lines that look like this:

Code:
2,dataflow,Sun Mar 17 16:50:01 2013,1363539001,2990,excelsheet,660,mortar,660,4

using the following command:

Code:
awk -F, '{$3=strftime("%a %b %d %T %Y,%s",$3)}1' OFS=, $DATAFILE | egrep -v "\-OLDISSUES," | ${AWK} "/${MONTH} ${DAY} ${TIMEH}:.*:.*/,0"

i want the lines to be outputted only if certain fields have numbers that are bigger than set limit.

i was thinking something like this:

Code:
awk -F, '{$3=strftime("%a %b %d %T %Y,%s",$3)}1' OFS=, $DATAFILE | egrep -v "\-OLDISSUES," | ${AWK} "/${MONTH} ${DAY} ${TIMEH}:.*:.*/,0" | ${AWK} -F"," '{if($9>=11) {print $0} }'

but i feel thats just too much awk. it could all be done with one awk...at least i hope.

Last edited by SkySmart; 03-19-2013 at 03:06 PM..
# 2  
Old 03-19-2013
Are you sure it's not strftime(...,$4) ? $3 is not an epoch time, but $4 looks like one.

You can combine them certainly:

Code:
awk '($9 >= 11) && !/-OLDISSUES/ { ...}'

I can fill things out in more detail if you explain what this does, I'm unfamiliar with this syntax:
Code:
${AWK} "/${MONTH} ${DAY} ${TIMEH}:.*:.*/,0"

# 3  
Old 03-19-2013
Quote:
Originally Posted by Corona688
Are you sure it's not strftime(...,$4) ? $3 is not an epoch time, but $4 looks like one.

You can combine them certainly:

Code:
awk '($9 >= 11) && !/-OLDISSUES/ { ...}'

I can fill things out in more detail if you explain what this does, I'm unfamiliar with this syntax:
Code:
${AWK} "/${MONTH} ${DAY} ${TIMEH}:.*:.*/,0"

thanks for responding. field three is actually in epoch time, but when you run the
Code:
"'{$3=strftime("%a %b %d %T %Y,%s",$3)}1' OFS=, "

on it, it translate it into what is shown above.

the
Code:
${AWK} "/${MONTH} ${DAY} ${TIMEH}:.*:.*/,0"

is to print all lines it finds under the first line that matches "MONTH DAY TIME". for instance, "Mar 19 18:.*:.*".

my problem is that the number of fields in each line in the datafile changes depending on a number.

so while the awk is printing all lines it finds under "Mar 19 18:", i want it to also run condition check. so for each line, i want to do something like this: "if field 9 of this line i'm currently reading is greater than 11", then print this, else, print this." this is where i get lost.
# 4  
Old 03-19-2013
Quote:
Originally Posted by Corona688
I can fill things out in more detail if you explain what this does, I'm unfamiliar with this syntax:
Code:
${AWK} "/${MONTH} ${DAY} ${TIMEH}:.*:.*/,0"

From awk
Quote:
A Boolean context shall be one of the following:
...
An expression used as a pattern (as in Overall Program Structure)
...
A pattern range consists of two expressions separated by a comma; in this case, the action shall be performed for all records between a match of the first expression and the following match of the second expression, inclusive. At this point, the pattern range can be repeated starting at input records subsequent to the end of the matched range.
Since the expressions are evaluated in a boolean context, the 0 will never trigger a match. So the quoted code means that once the regular expression matches, its actions will be applied to the line that matched the regexp and all subsequent lines.

Regards,
Alister
# 5  
Old 03-19-2013
Quote:
Originally Posted by alister
From awk

Since the expressions are evaluated in a boolean context, the 0 will never trigger a match. So the quoted code means that once the regular expression matches, its actions will be applied to the line that matched the regexp and all subsequent lines.

Regards,
Alister
how would you recommend fixing this?
# 6  
Old 03-19-2013
I wasn't pointing out a problem. I was merely explaining how the range worked, in response to Corona's unfamiliarity.

Regards,
Alister
# 7  
Old 03-19-2013
So the ",0" actually does nothing then? He's just matching individual lines with a regex?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. Shell Programming and Scripting

combining multiple sed statements

I need to run a cronjob that will monitor a directory for files with a certain extension, when one appears I then need to run the below scripts How do I go about combining the following sed statements into one script? and also retain the original filename.? sed 's/71502FSC1206/\n&/g' # add a... (2 Replies)
Discussion started by: firefox2k2
2 Replies

4. 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

5. 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

6. 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

7. 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

8. 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

9. 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

10. Shell Programming and Scripting

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) {... (7 Replies)
Discussion started by: gfhgfnhhn
7 Replies
Login or Register to Ask a Question