Using Shell variables in awk


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using Shell variables in awk
# 1  
Using Shell variables in awk

Hi All,
I have a file which I am reading and looking for "EXIT" statement. I want to insert ":JCWPROD" after each EXIT statement only if ":JCWPROD" doesn't exist.

Here is the sample file :
Code:
EXIT
Testing
EXIT
tesing123
EXIT

Desired file :
Code:
EXIT
:JCWPROD
Testing
EXIT
:JCWPROD
tesing123
EXIT
:JCWPROD

Code :
Code:
temp1=`awk '$0~"EXIT"{getline; print}' tst1`
awk -v var= "$temp1" '{ if(var != ":JCWPROD") {/EXIT/{print;print ":JCWPROD";next}1}' tst1 > tst2


The code above is not working for some reason.Can someone please help
# 2  
Code:
$ cat infile
EXIT
Testing
EXIT
tesing123
EXIT

Code:
awk '/EXIT/{print $0 RS ":JCWPROD" ; next}1' infile

Resulting
Code:
EXIT
:JCWPROD
Testing
EXIT
:JCWPROD
tesing123
EXIT
:JCWPROD

# 3  
Hello nua7,

Could you please try following and let me know if this helps.
Code:
 awk '($0 == "EXIT"){A=$0;getline;if($0 == "JCWPROD"){print A ORS $0} else if($0 != "JCWPROD" && $0 != "EXIT") {print A ORS ":JCWPROD" ORS $0} else{print A ORS ":JCWPROD"}}'  Input_file

Output will be as follows.
Code:
EXIT
:JCWPROD
Testing
EXIT
:JCWPROD
tesing123
EXIT
:JCWPROD

Also tested with a custom file where I have added an entry for word JCWPROD init and it looks to work for the same too.
Code:
cat test46
EXIT
JCWPROD
EXIT
Testing
EXIT
tesing123
EXIT

After running code output will be as follows.
Code:
EXIT
JCWPROD
EXIT
:JCWPROD
Testing
EXIT
:JCWPROD
tesing123
EXIT
:JCWPROD

Hope this helps.

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 4  
This works partly

Hi Ravinder Singh,
It is deleting all the lines found before 1st EXIT statement.

Input file :
Code:
test
EXIT
Testing
EXIT
tesing123
EXIT
:JCWPROD

Output file , where first line is deleted
Code:
EXIT
:JCWPROD
Testing
EXIT
:JCWPROD
tesing123
EXIT
:JCWPROD


Last edited by nua7; 02-17-2015 at 09:50 AM..
# 5  
Try
Code:
awk -v var="$temp1" \
        'X && ($0!~var) {print var}
                        {X=0}
         /EXIT/         {X=1}
         1
         END            {if (X) print var}
        ' file

# 6  
Hello nua7,

Sorry for same, I forgot to mention it will only look for string EXIT as per your input shown in POST#1, following may give you expected output, let me know if you have any queries on same.
Code:
awk '{if($0 == "EXIT"){A=$0;getline;if($0 == ":JCWPROD"){print A ORS $0} else if($0 != ":JCWPROD" && $0 != "EXIT") {print A ORS ":JCWPROD" ORS $0} else{print A ORS ":JCWPROD"}} else {print $0}}'   Input_file

Output will be as follows.
Code:
test
EXIT
:JCWPROD
Testing
EXIT
:JCWPROD
tesing123
EXIT
:JCWPROD

Hope this helps.

EDIT: Adding a non oneliner form of solution on same too.
Code:
awk '{
        if($0 == "EXIT"){
                                A=$0;
                                getline;
                                        if($0 == ":JCWPROD")                            {
                                                                                                print A ORS $0
                                                                                        }
                                        else if($0 != ":JCWPROD" && $0 != "EXIT")       {
                                                                                                print A ORS ":JCWPROD" ORS $0
                                                                                        }
                                        else                                            {
                                                                                                print A ORS ":JCWPROD"
                                                                                        }
                                                                                        }
        else            {
                                print $0
                        }
     }
    '  Input_file


Thanks,
R. Singh

Last edited by RavinderSingh13; 02-17-2015 at 10:49 AM.. Reason: Added a non one liner form of solution now
This User Gave Thanks to RavinderSingh13 For This Post:
# 7  
... or even
Code:
awk -v var="$temp1"\
        'X && ($0!~var) {print var}
                        {X=/EXIT/}
         1
         END            {if (X) print var}
        ' file

Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #297
Difficulty: Easy
Linux Mint can be booted and run from a USB flash drive on any modern computer capable of booting from a USB drive.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Passing Global Shell variables to awk

Hi All, Iam trying to pass global shell variables and is not working Main script is like below CYEAR=`date +"%y"` CFYEAR=`date +"%Y"` CMONTH=`date +"%m"` if then PMONTH=12 PYEAR=`expr $CYEAR - 1` PFYEAR=`expr $CFYEAR - 1` else PMONTH=`expr... (6 Replies)
Discussion started by: baanprog
6 Replies

2. Shell Programming and Scripting

Passing awk variables to shell

Hi. I need to parse file and assign some values to variables, right now i do like below MYHOMEDIR=`awk '/Home/ {print $NF}' output.txt` MYSHELL=`awk '/Shell/ {print $NF}' output.txt` PRGRP=`awk '/Primary/ {print $NF}' output.txt` SECGRP=`awk '/Second/ {print $NF}' output.txt` In this... (10 Replies)
Discussion started by: urello
10 Replies

3. Shell Programming and Scripting

awk - take variables out to shell

Hi, How could we take the value of awk variables out to shell? I know the following methods 1. awk '{print $1}' < file | read a echo $a 2. a=`awk '{print $1}' < file` echo $a Please let me know if there are any other methods. Also, how do we take more than 1 variable value... (4 Replies)
Discussion started by: Thumban
4 Replies

4. UNIX for Dummies Questions & Answers

Passing Shell Variables to an awk command

Hello, I have two files File1 & File2. File1 76 135 136 200 250 345 .... File2 1 24 1 35 1 36 1 72 .... I want to get all the values form File2 corresponding to the range in File 1 and feed it to a program. Is the code below right? Can I pass shell variables to awk in this... (2 Replies)
Discussion started by: Gussifinknottle
2 Replies

5. Shell Programming and Scripting

Shell Variables & awk...Help Please

I apologize if this topic has been beaten to death here, but my limited searching skills did not throw up any results. Here's what I am trying to accomplish List all the files in a certain directory; assign the file names to an array which will be used later in the script. My script looks like... (2 Replies)
Discussion started by: kash80
2 Replies

6. Shell Programming and Scripting

How to pass shell variables to awk's pattern?

How would I get folders owned by specific users.. I want to pass users as a shell variable to awk. drwxr-x--x 3 user1 allusers 512 Oct 14 2006 946157019/ drwxr-x--x 3 user2 allusers 512 Mar 9 2008 94825883/ drwxr-x--x 3 user3 allusers 512 Mar 9 2008 948390501/ ... (3 Replies)
Discussion started by: kchinnam
3 Replies

7. Shell Programming and Scripting

Awk, shell variables

Hello, I've been trying to figure out how to use variables inside the AWK command and use it back in the korn shell sript. in my script I have lots of awk commands like this grep Listen /etc/ssh/sshd_config | \ awk '{ if ($2 == "22" ) print "OK"; else print "not OK" }' ... (3 Replies)
Discussion started by: mirusko
3 Replies

8. Shell Programming and Scripting

Accessing Shell Variables in awk or sed

Hello, I wonder if it is possible to pass and use variables from shell environment into sed or awk. I am trying to achieve something similar to the following using sed or awk: var=some_regular_expression grep "$var" filename # Will extract lines from filename The following code,... (3 Replies)
Discussion started by: nasersh
3 Replies

9. Shell Programming and Scripting

Modify shell variables with AWK

Dear Folks, I have a command output something like: And I want to store PIN0 and SIG0 in two shell variables, now I do a double awk: PIN=`gsmctl -d /dev/ttyS0 pin sig | awk '/PIN0/ { print $2}'` SIG=`gsmctl -d /dev/ttyS0 pin sig | awk '/SIG0/ { print $2}'` It's possible to... (4 Replies)
Discussion started by: Santi
4 Replies

10. Shell Programming and Scripting

Using shell variables In awk

Oh its not my day for syntax... cat gzipsize.txt | awk '{print "echo",$1,$2} > master.txt I have read a lot about the awk -v but haven't been able to get it to work. I have a variable in my script and I'm looking just to push it into the awk after the $2 (or anywhere would do)!!! Every... (11 Replies)
Discussion started by: nortypig
11 Replies

Featured Tech Videos