AWK Script and Commandline difference


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting AWK Script and Commandline difference
# 1  
Old 06-29-2011
AWK Script and Commandline difference

Hey there,

I just stumbled upon a difference between using awk on the commandline and using it in a shellscript.

I have a variable, e.g.: PROG=vim
then i want to check if the package with this name is installed: TEMPVAL=$(dpkg -l | awk '{ if ($2 == "$PROG") print $2 }') (Im using Tempval later in an condition to check if it is installed)
Running this on the commandline works fine. In the shellscript TEMPVAL is always empty.

btw "toinstall" just contains some package names to be installed and comments prefixed with #

full script:
Code:
#!/bin/bash

for prog in `cat toinstall | grep -vP "^#" | grep -vP "^$"`
do
    TEMPVAL=$(`dpkg -l | awk '{ if ($2 == "${prog}") print $2}'`)
    if [  "$TEMPVAL" == "" ]
    then
    sudo apt-get install -y $prog
    fi
done

bash -x output:
Code:
+ for prog in '`cat toinstall | grep -vP "^#" | grep -vP "^$"`'
+++ dpkg -l
+++ awk '{ if ($2 == "${prog}") print $2}'
+ TEMPVAL=
+ '[' '' == '' ']'
+ sudo apt-get install -y vim

Whats the Problem?Smilie I already tried playing with the quotation, but nothing worked. Hope somebody can help me. I'd also appreciate hints or tips if theres a more convenient way of doing what i want to do Smilie

Greetings, MrSnail
# 2  
Old 06-29-2011
Code:
TEMPVAL=$(dpkg -l | awk '{ if ($2 == "'${prog}'") print $2}')

Or (my prefred way):
Code:
TEMPVAL=$(dpkg -l | awk '{ if ($2 == prog) print $2}' prog="${prog}")

Jean-Pierre.
# 3  
Old 06-29-2011
Code:
awk '{ if ($2 == "'"$prog"'") print $2}'

This article describes three ways to interface AWK programs with shell scripts and how to import shell variables into AWK programs.

But a little better:

Code:
awk '$2 == "'"$prog"'" {print $2}'

The inner double quotes are really not needed here but this is a good habit.

Last edited by yazu; 06-29-2011 at 11:24 AM..
# 4  
Old 06-29-2011
Well,... that was quite easy Smilie
Thanks a lot for this fast response. Smilie
# 5  
Old 06-29-2011
Quote:
Originally Posted by yazu
Code:
awk '{ if ($2 == "'"$prog"'") print $2}'

This article describes three ways to interface AWK programs with shell scripts and how to import shell variables into AWK programs.

But a little better:

Code:
awk '$2 == "'"$prog"'" {print $2}'

The inner double quotes are really not needed here but this is a good habit.
It's actually a pretty bad habit -- there's a much better way to get variables into awk, -v. No need to mess with ending and beginning single and double quotes inside the awk script itself.

Code:
awk -v VAR="$prog" '$2 == VAR { print $2 }'

# 6  
Old 06-29-2011
I wrote about quoting shell variables not about embedding.

Maybe you true about awk but the "pretty bad" way is universal - it's for perl, sed, python or almost anything other, where you want to embed shell variables.
# 7  
Old 06-29-2011
Quote:
Originally Posted by yazu
I wrote about quoting shell variables not about embedding.

Maybe you true about awk but the "pretty bad" way is universal
It's a bad idea because it becomes language syntax, not merely a string. This is especially bad for a variable, where you might not have strict control over the exact contents:
Code:
$ STR="hello 'world'"
$ awk 'BEGIN { print "'$STR'" }'
awk: BEGIN { print "hello
awk:               ^ unterminated string
$

Quote:
it's for perl
Code:
 VAR="this will barf'"
# subsitute in the shell and it barfs, taking the extra ' as perl syntax
$ perl -e "print '$VAR', "\n";'
Can't find string terminator '"' anywhere before EOF at -e line 1.
# do it properly and it will not.
$ perl -e 'print shift, "\n"' "$VAR"
this will barf'
$

Quote:
...sed, python or almost anything other, where you want to embed shell variables.
I admit there's no good way to do it in sed, but this is an argument against sed, not an argument for that syntax. It's very difficult to safely put variables in sed because so many things need escaping.

And if the argument is that you don't need to memorize syntax for each language, well, you already had to memorize -e for perl, how much harder is -v, shift, etc?

Last edited by Corona688; 06-29-2011 at 12:42 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to put a difference calculation in my awk script ?

Hello, For my CGI, I have this script : #!/bin/bash echo "Content-type: text/html" echo "" echo ' <html> <head> <meta http-equiv="Content-Type" content="test/html"; charset=UTF-8"> <title> CLF MONITORING </title> <h1> FRAME... (4 Replies)
Discussion started by: Tim2424
4 Replies

2. Shell Programming and Scripting

awk to calculate difference of split and sum the difference

In the awk I am trying to subtract the difference $3-$2 of each matching $4 before the first _ (underscore) and print that value in $13. I think the awk will do that, but added comments. What I am not sure off is how to add a line or lines that will add sum each matching $13 value and put it in... (2 Replies)
Discussion started by: cmccabe
2 Replies

3. Shell Programming and Scripting

awk script to find time difference between HTTP PUT and HTTP DELETE requests in access.log

Hi, I'm trying to write a script to determine the time gap between HTTP PUT and HTTP DELETE requests in the HTTP Servers access log. Normally client will do HTTP PUT to push content e.g. file_1.txt and 21 seconds later it will do HTTP DELETE, but sometimes the time varies causing some issues... (3 Replies)
Discussion started by: Juha
3 Replies

4. Shell Programming and Scripting

Script executed by Cron or commandline

Hello all, I have a question regarding the difference betwen cron and command line. What I would like to do is to print a statement into a logfile if a script has been executed from cron or from command line. It should be as: #!/bin/bash if <Check if this script has been... (3 Replies)
Discussion started by: API
3 Replies

5. Shell Programming and Scripting

sed commands success / fail from commandline vs ksh script

solaris 5.10 Generic_138888-03 sun4v sparc SUNW,Sun-Fire-T200 I need a sed command that tests true when presented with lines that contain either forward and backslash. input file: c:/myFile.txt c:\yourFile.txt It doesn't appear that sed (in my environment anyway) supports... (4 Replies)
Discussion started by: msutfin
4 Replies

6. UNIX for Dummies Questions & Answers

Shell script - getting Time difference using awk

Hi..I have the data in a file like in this format, and I need the output time difference in seconds by using awk command. Start date/time and end date/time given in column 2,3 & 4,5. Please assist how to write shell script. File1.txt JOB1 10/09/2013 17:42:16 10/09/2013 17:43:46 SU 6202685/1... (4 Replies)
Discussion started by: mprithvi
4 Replies

7. Shell Programming and Scripting

How to print and append output of nawk script in commandline and as well into a file?

Hi All, I am working on nawk script, has the small function which prints the output on the screen.Am trying to print/append the same output in a file. Basically nawk script should print the output on the console/screen and as well it should write/append the same result to a file. script :... (3 Replies)
Discussion started by: Optimus81
3 Replies

8. Shell Programming and Scripting

Handling values with space while passing commandline argument from wrapper script in KSH

Hi there, I have a wapper script which passes the argument from command prompt to inner script.. It works fine as long as the argument containing single word. But when value contains multiple word with space, not working as expected. I tried my best, couldn't find the reason. Gurus, pls.... (2 Replies)
Discussion started by: kans
2 Replies

9. Shell Programming and Scripting

How to determine if a script (perl) was called from a CRON job or commandline

Hi, Is there a way to determine if a Script is called from a CRON job or from a commandline Gerry. (2 Replies)
Discussion started by: jerryMcguire
2 Replies

10. Shell Programming and Scripting

script to go to a different dir to run a commandline prompt in that dir

Hi, I need to know how I'll be able to write a script that can goto a different dir where I don't have access to read,write and execute and also to run a commandline prompt in that dir with one file whose path has to be specified in that command. Will I be able to do this? Any ideas or... (2 Replies)
Discussion started by: ann_124
2 Replies
Login or Register to Ask a Question