Visit Our UNIX and Linux User Community


Executing if dynamic conditions in awk


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Executing if dynamic conditions in awk
# 1  
Old 02-12-2020
Executing if dynamic conditions in awk

Hi All,

I got struck at the below point where i am unable to get the desired output after forming the dynamic conditions.Below is the design.
1. We are getting inputs from the shell arguments and storing in a variable like below.
Code:
CONDITIONS="1=CT,2=US_10,3=CT_US_10"

2. After this i am mapping the position of the fields and storing the condition in the variable as below
Code:
CON=$1 == "CT" && $4 == US_10 && $60 == CT_US_10

3. I wish to apply it in the if statement get the desired output as below, however it is not working.
Code:
usr/bin/awk -v CONDITION="${CON}" 'BEGIN{FS=","}{ if (CONDITION) {print CONDITION"|"$147"|"$15"|"$16"|"$17"|"$4} } '

Can anyone help us

Moderator's Comments:
Mod Comment
There are 2 things you need to notice with regards to your post:

1- Please DO NOT color your text, keep it in simple default format and color.

2- After having these many posts from your in forums we expect you to wrap your samples with CODE TAGS as per forum rules so please always do so.

Thanks & Regards,
MODs team

Last edited by RavinderSingh13; 02-12-2020 at 12:13 PM..
# 2  
Old 02-12-2020
Hi
the question under item 2. is not entirely clear
can you show the code how you are mapping and storing in the variable?
# 3  
Old 02-12-2020
Hi Moderators,
My sincere apologies.
@nezabudka, Please see the below code
Code:
#Shell arguments
#-------------------
sh samplecollector.sh "20200212" "1=CT,2=US_10,3=CT_US_10"

#Inside the script
#----------------------
FILEDATE=$1
CONDITIONS=$2 # Used the values directly in the variable in my post, the condition can be one or many based on user input

/usr/bin/awk -v COND=${CONDITIONS} -F"," 'function strcondition(h,  i,F,v,b,dec) {F=split(h,v,",");for(i=1;i<=F;i++) {split(v[i],b,"=");dec=(dec != "") ? dec""sprintf(" %s == \"%s\" &&",lookup(b[1]),b[2]) : sprintf("%s == \"%s\" &&",lookup(b[1]),b[2]);} sub(/[ &&\t\r\n]+$/, "", dec);return dec;} function lookup(l,  f,ar){ar[1]="$1";ar[2]="$4";ar[3]="$60";ar[4]="$17";ar[5]="$4";if (l in ar) {return ar[l];}} { if(strcondition(COND));{print COND"|"$147"|"$15"|"$16"|"$17"|"$4}}' Record_${FILEDATE}.dat


Last edited by cskumar; 02-12-2020 at 02:56 PM..
# 4  
Old 02-12-2020
And where did you get the CONDITION variable in "awk"?

--- Post updated at 21:59 ---

Is a colon needed here?
Quote:
{ if(strcondition(COND));{print CONDITION"|"$147"|"$15"|"$16"|"$17"|"$4}}'
maybe
Code:
{ if(strcondition(COND))print COND"|"$147"|"$15"|"$16"|"$17"|"$4}

This User Gave Thanks to nezabudka For This Post:
# 5  
Old 02-12-2020
A one or two line data sample would be nice.


The if (...); will do nothing.
The print CONDITION will print an empty entity as the variable is not defined.


Your idea / approach will not work per se. You will need to compile your COND in, e.g. have some text tool write a script which then will be executed by awk.
This User Gave Thanks to RudiC For This Post:
# 6  
Old 02-12-2020
You need to assign the return value from the function "strcondition(COND)" to CONDITION
# 7  
Old 02-12-2020
an ex.:
Code:
CONDITIONS="1=CT,2=US_10,3=CT_US_10"

CON='$1 == "CT" && $4 == "US_10" && $60 == "CT_US_10"'

awk -v CONDITION="${CON}" -F, '
BEGIN {
c=split(CONDITION, cons, " *&& *");
for (i=1; i<=c; i++) {
split(cons[i], cs, " *== *");
sub("[$]", "", cs[1]);
gsub("[\"]", "", cs[2]);
conditions[cs[1]]=cs[2];
}
}
{
n=0;
for (i in conditions) if ($(i)==conditions[i]) n++;
if (n==c) print CONDITION"|"$147"|"$15"|"$16"|"$17"|"$4;
}
' file


Last edited by rdrtx1; 02-18-2020 at 08:23 PM..
This User Gave Thanks to rdrtx1 For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #164
Difficulty: Easy
Developers began to abandon MINIX after free and open-source Unix-like operating systems such as Linux and 386BSD became available in the early 1990s.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk problems - awk ignores conditions

awk 'BEGIN{ if('"$CATE"'<'"${WARN}"') printf ("%s", "'"`Kfunc "" ; break`"'") else if (('"${CATE}"'>='"${WARN}"') && ('"${CATE}"'<'"${CRIT}"')) printf ("%s", "'"`Wfunc ""; break`"'") else if ('"${CATE}"'>='"${CRIT}"') printf... (6 Replies)
Discussion started by: SkySmart
6 Replies

2. Shell Programming and Scripting

If conditions in awk

Hello Friends, I need to find some CDRs in production servers whose 1st field value and 2nd field value = 1 and 11th looks like 45.123... where there are more than 3 digits after comma.so i wrote a one liner, something like below but does not work, however when i used first and second conditions... (8 Replies)
Discussion started by: EAGL€
8 Replies

3. Shell Programming and Scripting

Shell script executing both the conditions.

I have written this script. This is used for creating a backup folder. #!/bin/sh #set -x . /home/.profile usage="Usage is $0" usage="$usage " # Use the getopt utility to set up the command line flags. set -- `/usr/bin/getopt b: $*` # Process individual command line arguments while ;... (1 Reply)
Discussion started by: arijitsaha
1 Replies

4. Shell Programming and Scripting

awk three conditions

I'm having a problem pulling UID's from data. The data outputs a user's UID in one of three ways: 1. Error User user_name already assigned with <UID> 2. Success <UID> reserved for user_name 3. <a load of crap because there was a db failure yet somehow the UID is still in there> I typically... (5 Replies)
Discussion started by: MaindotC
5 Replies

5. Shell Programming and Scripting

awk with conditions

Hi All, I have a file with below contents. "en2"/10.185.81.0:cluster_interconnect,"en5"/10.185.81.0:cluster_interconnect,"en6"/169.181.146.0:public I want to take the interface name from the file and convert it as ipaddress using ifconfig command get the output like below en6 ->... (2 Replies)
Discussion started by: kamauv234
2 Replies

6. Shell Programming and Scripting

Conditions in awk

Hi there, here is my command ssh host.local "/path/to/my/perscript/hostconfig.pl -s $HOST -d |awk '{if (\$4 > 120)print \"My error message\";exit}{s=0; for (i=1; i<=NF; i++) s++; if(s == 13) print \$3}'" The problem is if conditional 1 is met (i.e $4 > 120), i don't see "My error message", the... (5 Replies)
Discussion started by: urello
5 Replies

7. Shell Programming and Scripting

awk with two conditions

Hi Everyone, # cat 1 1;2;3;4;5;6 1;2;3;4;5; # awk -F ";" '$5 == "5"' 1 1;2;3;4;5;6 1;2;3;4;5; but the output is should be just "1;2;3;4;5;6" means 1st condition: $5 is 5; 2nd condition: $6 is not empty, please advice. Thanks (2 Replies)
Discussion started by: jimmy_y
2 Replies

8. Shell Programming and Scripting

specifying multiple conditions in AWK

how can i specify more than 1 consition in the following AWK statament?? i.e. if $2 is ABCD and $3 is MNOP and $4 is KLPM similarly for OR #!/bin/ksh awk -F '' ' $2 == "ABCD" { print $2, $3;}' file.xml (2 Replies)
Discussion started by: skyineyes
2 Replies

9. UNIX for Advanced & Expert Users

Dynamic Downloading and executing of ELF files

Dear Group, I want to prepare an ELF file which can be downloaded dynamically to any address in the moemory and executes as a new task/thread/process. 1) for this what are all the compileation, linker options while building the ELF file? 2) which parts of ELF file has to modified while... (1 Reply)
Discussion started by: ravinder.are
1 Replies

10. Shell Programming and Scripting

About awk conditions

Hello, Can you explain why in the first 2 commands the awk does not print anything? Is it looking of a specific format ? Thanks. $ echo 12a3 | awk '($1>=2) {print $1}' # prints nothing $ echo 123a | awk '($1>=2) {print $1}' # prints nothing $ echo a123 | awk '($1>=2) {print $1}' a123... (1 Reply)
Discussion started by: majormark
1 Replies

Featured Tech Videos