totally made up logic
Input
Code:
data;data;data;data;;data;my_string;foo;data;data;data;data;;;FooBar;;;;etc;etc
data;data;data;data;;data;my_string;bar;data;data;data;data;;;FooBar;;;;etc;etc
data;data;data;data;;data;my_string;car;data;data;data;data;;;FooBar;;;;etc;etc
data;data;data;data;;data;my_string;car;data;data;data;data;;;foo;;;;etc;etc
data;data;data;data;;data;my_string;bar;data;data;data;data;;;foo;;;;etc;etc
User vars
Code:
String1=foo
String2=bar
String3=FooBar
Code:
awk -v A=$String1 -v B=$String2 -v C=$String3 -F\; '{
if (( $8 == A || $8 == B ) && $15 == C) {printf "%-30s%s\n","8 is A or B AND 15 is C ",$0};
if ( $8 != A && $15 == C) {printf "%-30s%s\n","8 is not A AND 15 is C ",$0};
if (( $8 == A || $8 == B ) && $15 != C) {printf "%-30s%s\n","8 is A or B AND 15 is not C ",$0};
}' Input
gives
Code:
8 is A or B AND 15 is C data;data;data;data;;data;my_string;foo;data;data;data;data;;;FooBar;;;;etc;etc
8 is A or B AND 15 is C data;data;data;data;;data;my_string;bar;data;data;data;data;;;FooBar;;;;etc;etc
8 is not A AND 15 is C data;data;data;data;;data;my_string;bar;data;data;data;data;;;FooBar;;;;etc;etc
8 is not A AND 15 is C data;data;data;data;;data;my_string;car;data;data;data;data;;;FooBar;;;;etc;etc
8 is A or B AND 15 is not C data;data;data;data;;data;my_string;bar;data;data;data;data;;;foo;;;;etc;etc
added a little to the beginning so only data which contains "FooBar" is considered ( any field )
Code:
awk -v A=$String1 -v B=$String2 -v C=$String3 -F\; '$0 ~ C{
if (( $8 == A || $8 == B ) && $15 == C) {printf "%-30s%s\n","8 is A or B AND 15 is C ",$0};
if ( $8 != A && $15 == C) {printf "%-30s%s\n","8 is not A AND 15 is C ",$0};
if (( $8 == A || $8 == B ) && $15 != C) {printf "%-30s%s\n","8 is A or B AND 15 is not C ",$0};
}' Input
Code:
8 is A or B AND 15 is C data;data;data;data;;data;my_string;foo;data;data;data;data;;;FooBar;;;;etc;etc
8 is A or B AND 15 is C data;data;data;data;;data;my_string;bar;data;data;data;data;;;FooBar;;;;etc;etc
8 is not A AND 15 is C data;data;data;data;;data;my_string;bar;data;data;data;data;;;FooBar;;;;etc;etc
8 is not A AND 15 is C data;data;data;data;;data;my_string;car;data;data;data;data;;;FooBar;;;;etc;etc
this time, only when no "FooBar" ( any field )
Code:
awk -v A=$String1 -v B=$String2 -v C=$String3 -F\; '$0 !~ C{
if (( $8 == A || $8 == B ) && $15 == C) {printf "%-30s%s\n","8 is A or B AND 15 is C ",$0};
if ( $8 != A && $15 == C) {printf "%-30s%s\n","8 is not A AND 15 is C ",$0};
if (( $8 == A || $8 == B ) && $15 != C) {printf "%-30s%s\n","8 is A or B AND 15 is not C ",$0};
}' Input
Code:
8 is A or B AND 15 is not C data;data;data;data;;data;my_string;bar;data;data;data;data;;;foo;;;;etc;etc
Now, instead of just printing, things can be sent to different files based on which statements are true (or false )
you can even have awk execute system commands
if you want to do different things based on what you find ( or don't find ) awk is very flexible
However, if I knew perl, python, ruby or some other languages, I might favour them
I guess it really depends on how complex your logic is, but I wager it is easier in awk than with grep
alone and bash 'combo'
I have a feeling this 'grep' business is just a small part of something bigger
Warning:
too much coffee..
I really didn't check the logic!
A Link
http://www.gnu.org/s/gawk/manual/
should point out
Other awks available , nawk , mawk
nawk is faster, but missing some 'features' of gawk
http://www.staff.science.uu.nl/~oost.../nawk_toc.html
Hopefully someone can give some incite into perl / python / ruby
I don't know much about them, they may be 'better' than awk for this