Sponsored Content
Top Forums Shell Programming and Scripting awk - multiple and nested if-then-else Post 303038702 by jcdole on Wednesday 11th of September 2019 06:21:13 PM
Old 09-11-2019
awk - multiple and nested if-then-else

Hello.


I would like to convert the following piece of code from bash to awk.

Here are bash variables in a bash script.

CUR_ROW_ID and ROW_ID_TO_SEARCH contains a string which represent a row id.

The string contain a valid row id.
  • CUR_ROW_ID sometimes may be null.
  • CUR_VALUE contains a string which represent the value of the relative CUR_ROW_ID.
  • CUR_VALUE sometimes may be null.
  • DO_IT is a flag to control the rest of the process.

Three variables a read from bash env to awk env : CUR_ROW_ID and ROW_ID_TO_SEARCH and CUR_VALUE
One variable is write from awk env to bash env.


Don't look for a meaning in this piece of code. It's just a question about nested if-then-else


ROW_ID_TO_SEARCH contains a string to search in the input file
If there is a match CUR_ROW_ID = ROW_ID_TO_SEARCH
If ROW_ID_TO_SEARCH is not in the input file CUR_ROW_ID is null.
I got this in bash with something like :
Code:
    L_FLAG=$( cat $L_INPUT_FILE | grep -w "$ROW_ID_TO_SEARCH" )
    if [[ -z $L_FLAG ]] ; then
        echo "ROW : $ROW_ID_TO_SEARCH not in use"
    else
        .................
        .................
        .................
    fi

So my question is : how to convert the following in awk :

Code:
    if [[  -z "$CUR_ROW_ID" ]] ; then

        printf "NEW ROW to insert" 

        DO_IT=1

    else

        if [[  "$CUR_ROW_ID" == "$ROW_ID_TO_SEARCH" ]] ; then 

                if [[ -z "$CUR_VALUE" ]] ; then
 
                    printf "NEW VALUE TO CREATE for ROW : %s\n" "$CUR_ROW_ID"
                    DO_IT=2 

            else 

                printf "CURRENT VALUE : %s TO UPDATE for ROW : %s\n" "$CUR_VALUE" "$CUR_ROW_ID"
                DO_IT=3 

            fi 

        fi 

    fi

AWK part

To convert
Code:
if [[  -z "$CUR_ROW_ID" ]] ; then

I have tried this which does not work ( print all the line ) :
Code:
awk -v a="$ROW_ID_TO_SEARCH" '{ if ($0 !~ a) {  printf ("NOT FOUND --> ROW_ID:%s\n",a)  }} '  $L_INPUT_FILE

For nested if-the-else I have tried this which should not print nothing because "ROW_ID_TO_SEARCH" (FORCE_IGNORE9) is not in the input file

Code:
awk -v a="$ROW_ID_TO_SEARCH" '{  if($1 == a)
    { if ($2 == "" ) printf ("ID_NULL --> ROW_ID:%s\tVALUE:%s\n",$1,$2) }
      else if ($2 != "" ) {  printf ("ID_NOLT_NULL --> ROW_ID:%s\tVALUE:%s\n",$1,$2) } ;
    }'  $L_INPUT_FILE

The result is :

Code:
ID_NOLT_NULL --> ROW_ID:#FORCE_IGNORE2 VALUE:1
ID_NOLT_NULL --> ROW_ID:FORCE_IGNORE4_1 VALUE:2
ID_NOLT_NULL --> ROW_ID:FORCE_IGNORE4_3 VALUE:3
ID_NOLT_NULL --> ROW_ID:FORCE_IGNORE4_5 VALUE:4

Test with :

Code:
ROW_ID_TO_SEARCH=FORCE_IGNORE9

the input file contains :

Code:
FORCE_IGNORE1
#FORCE_IGNORE2    1
FORCE_IGNORE3
FORCE_IGNORE4_1    2
FORCE_IGNORE4_2
FORCE_IGNORE4_3    3
FORCE_IGNORE4_4
FORCE_IGNORE4_5    4
FORCE_IGNORE4_6


Any help is welcome.
 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Nested Loop to Echo Multiple Arrays

I have three arrays which hold three elements each. I have a fourth array which contains the names of those three arrays. I'm having difficulty creating a nested loop that can loop through each array and echo their values. script #!/bin/ksh # array of locations (usa, london, australia)... (1 Reply)
Discussion started by: yongho
1 Replies

2. Shell Programming and Scripting

awk 2 delimiter nested

Hello All, This work could be very easy for you guys. I would really appreciate help. input file: output file: (Desired) What I am capable of doing: Command: cat inputfile | awk -F\| '{print "num="$1" value="$2" digits="$3" name1="$4" file="$5" code="$6}' > outputfile Result what I am... (5 Replies)
Discussion started by: onlyroshni
5 Replies

3. UNIX for Advanced & Expert Users

sed in awk ? or nested awk ?

Hey all, Can I put sed command inside the awk action ?? If not then can i do grep in the awk action ?? For ex: awk '$1=="174" { ppid=($2) ; sed -n '/$ppid/p' tempfind.txt ; }' tempfind.txt Assume: 174 is string. Assume: tempfind.txt is used for awk and sed both. tempfind.txt... (11 Replies)
Discussion started by: varungupta
11 Replies

4. UNIX for Dummies Questions & Answers

Nested if with multiple conditions

Deal Experts I am working on a script to find a date which is 7 days older and follwoing is my approach #!/bin/sh Yr=`date +"%Y"` Mn=`date +"%m"` Md=28 Da=`date +"%d"` echo $Yr echo $Mn echo $Da var1=$Yr$Mn$Da echo "before" $var1 if expr $Da > 7 then Da=`expr $Da - 7`... (3 Replies)
Discussion started by: sweetnsourabh
3 Replies

5. Shell Programming and Scripting

Nested case inside awk

please let me know if the below code could be written efficiently inside single awk case "$INP" in ksh) cat catalog | awk 'BEGIN {FS=",";} { print $2 } END {}' ;; pset) cat catalog | awk 'BEGIN {FS=",";} { print $3 } END {}' ;; dml) cat catalog | awk 'BEGIN {FS=",";} {... (2 Replies)
Discussion started by: cvsanthosh
2 Replies

6. Shell Programming and Scripting

Help with nested $s and quotations in bash / awk

Folks - newbie bash coder here and I'd like to get your help to make the code below work. As you can see, I was trying to count the total number of lines with the 3rd value >= 15 in a file and wanted to make the threshold "15" configurable, but apparently the $THRESHOLD value was not populated... (3 Replies)
Discussion started by: bashzipper
3 Replies

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

8. Shell Programming and Scripting

Using shell command need to parse multiple nested tag value of a XML file

I have this XML file - <gp> <mms>1110012</mms> <tg>988</tg> <mm>LongTime</mm> <lv> <lkid>StartEle=ONE, Desti = Motion</lkid> <kk>12</kk> </lv> <lv> <lkid>StartEle=ONE, Source = Velocity</lkid> <kk>2</kk> </lv> <lv> ... (3 Replies)
Discussion started by: NeedASolution
3 Replies

9. Shell Programming and Scripting

awk nested looping?

I am trying to parse a text file and send its output to another file but I am having trouble conceptualizing how I am supposed to do this in awk. The text file has a organization like so: Name Date Status Location (city, state, zip fields) Where each of these is on a separate line in... (1 Reply)
Discussion started by: kellyanneghj
1 Replies
All times are GMT -4. The time now is 10:19 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy