Passing command line arguments to awk

Posted on 1998-06-23
Last Modified: 2013-12-26
How can I pass a command line argument such as $1 or $2 into an awk script?

I have written a shell script that includes some awk programming and i need to be able to call that program by typing ./program inputword and then search for inputword within awk.

For example, if I had a datafile with the following contents:


and i wanted to write a script to search through that file for a name that I give at the command line

awk '
$4 ~ /b/ {print $4} ' datafile

i would like to do it like this

awk '
$4 ~ /input from command line such as $1/ {print $4}' datafile

I have tried this:

awk '
$4 ~ /inputword/ {print $4}' inputword=$1 datafile

without any luck

I have to be able to run the program without having to type something like

awk -f scriptfile datafile

as it gets to confusing.

Can anyone help?

Question by:ianfoster
  • 3
LVL 51

Accepted Solution

ahoffmann earned 100 total points
ID: 1294239
2 possibilities:

1. use gawk -v varname=inputword -f awkscript datafile
   (use  varname in you awk script)

2. using traditional awk is somehow triky, you must pass in you
   strings via the data stream and then identify it uniqely

   /^SPECIAL_VALUE/ { inputword = $2; next; }
   {   # rest of script }

   call this script as follows:

   (echo SPECIAL_VALUE "your_value"; cat datafile)|awk -f script

   Keep in mind that SPECIAL_VALUE *must not* appear in datafile.
LVL 51

Expert Comment

ID: 1294240
(echo SPECIAL_VALUE inputword; cat datafile) | awk '/^SPECIAL_VALUE/ { pattern=$2;} $4 ~ pattern {print $4}'
LVL 84

Expert Comment

ID: 1294241
awk "\$4 ~ /$1/ {print \$4}"  datafile

Author Comment

ID: 1294242
I've installed gawk on the machine but still no luck :(

Here's another example:



echo "Here we go!"

# the rest of the shell script goes here

gawk -v input=$1 -F: '
$1 ~ /input/ {print $1}' datafile


datafile contents as follows


I call the program as follows

/gawkprog a

it should print out "a" for each line but I get nothing.

it does read in the $1 part because I can do this                  

gawk -v input=$1 -F: '
{print input} ' datafile

and run it ./gawkprog a

and it will print out


so the problem seems to be that gawk doesnt like matching things with
the input part.

any ideas?
LVL 51

Expert Comment

ID: 1294243
gawk -v input=$1 -F: '$1 ~ input {print $1}' datafile

BTW, ozo's solution works also inside a shell script

Featured Post

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Replacement selected text 2 62
Sed question 2 85
Change to event 1 112
Is there a simple front-end menu system. 9 89
Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit If you want to manage em…

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question