Node:Executable Scripts, Next:Comments, Previous:Long, Up:Running gawk
awk
ProgramsOnce you have learned awk
, you may want to write self-contained
awk
scripts, using the #!
script mechanism. You can do
this on many Unix systems1 as well as on the GNU system.
For example, you could update the file advice
to look like this:
#! /bin/awk -f BEGIN { print "Don't Panic!" }
After making this file executable (with the chmod
utility),
simply type advice
at the shell and the system arranges to run awk
2 as if you had
typed awk -f advice
:
$ chmod +x advice $ advice -| Don't Panic!
Self-contained awk
scripts are useful when you want to write a
program that users can invoke without their having to know that the program is
written in awk
.
#!
Some systems limit the length of the interpreter name to 32 characters. Often, this can be dealt with by using a symbolic link.
You should not put more than one argument on the #!
line after the path to awk
. It does not work. The operating system
treats the rest of the line as a single argument and passes it to awk
.
Doing this leads to confusing behavior--most likely a usage diagnostic
of some sort from awk
.
Finally,
the value of ARGV[0]
(see Built-in Variables)
varies depending upon your operating system.
Some systems put awk
there, some put the full pathname
of awk
(such as /bin/awk
), and some put the name
of your script (advice
). Don't rely on the value of ARGV[0]
to provide your script name.
The #!
mechanism works on
Linux systems,
systems derived from the 4.4-Lite Berkeley Software Distribution,
and most commercial Unix systems.
The
line beginning with #!
lists the full file name of an interpreter
to run and an optional initial command-line argument to pass to that
interpreter. The operating system then runs the interpreter with the given
argument and the full argument list of the executed program. The first argument
in the list is the full file name of the awk
program. The rest of the
argument list contains either options to awk
, or data files,
or both.