Options begin with a dash and consist of a single character. GNU-style long options consist of two dashes and a keyword. The keyword can be abbreviated, as long as the abbreviation allows the option to be uniquely identified. If the option takes an argument, then the keyword is either immediately followed by an equals sign (‘=’) and the argument's value, or the keyword and the argument's value are separated by whitespace. If a particular option with a value is given more than once, it is the last value that counts.
Each long option for gawk has a corresponding POSIX-style short option. The long and short options are interchangeable in all contexts. The following list describes options mandated by the POSIX standard:
FSvariable to fs (see Field Separators).
BEGINrule (see Other Arguments).
The -v option can only set one variable, but it can be used more than once, setting another variable each time, like this: ‘awk -v foo=1 -v bar=2 ...’.
CAUTION: Using -v to set the values of the built-in variables may lead to surprising results. awk will reset the values of those variables as it needs to, possibly ignoring any predefined value you may have given.
This is useful if you have file names that start with ‘-’, or in shell scripts, if you have file names that will be specified by the user that could start with ‘-’. It is also useful for passing options on to the awk program; see Getopt Function.
The following list describes gawk-specific options:
printfare treated as single-byte characters.
Normally, gawk follows the POSIX standard and attempts to process
its input data according to the current locale. This can often involve
converting multibyte characters into wide characters (internally), and
can lead to problems or confusion if the input data does not contain valid
multibyte characters. This option is an easy way to tell gawk:
“hands off my data!”.
Having a list of all global variables is a good way to look for
typographical errors in your programs.
You would also use this option if you have a large program with a lot of
functions, and you want to be sure that your functions don't
inadvertently use global variables that you meant to be local.
(This is a particularly easy mistake to make with simple variable
This option is particularly necessary for World Wide Web CGI applications that pass arguments through the URL; using this option prevents a malicious (or other) user from passing in options, assignments, or awk source code (via --source) to the CGI application. This option should be used with ‘#!’ scripts (see Executable Scripts), like so:
#! /usr/local/bin/gawk -E awk program here ...
gettextPortable Object Template file on standard output for all string constants that have been marked for translation. See Internationalization, for information about this option.
dl_load(). An alternative is to use the ‘@load’ keyword inside the program to load a shared library.
Some warnings are only printed once, even if the dubious constructs they
warn about occur multiple times in your awk program. Thus,
when eliminating problems pointed out by --lint, you should take
care to search for all occurrences of each inappropriate construct. As
awk programs are usually short, doing so is not burdensome.
CAUTION: This option can severely break old programs. Use with care.
The profile contains execution counts for each statement in the program
in the left margin, and function call counts for each function.
FSis equal to a single space (see Fields).
FSto be a single TAB character (see Field Separators).
If you supply both --traditional and --posix on the
command line, --posix takes precedence. gawk
also issues a warning if both options are supplied.
system()function, input redirections with
getline, output redirections with
printf, and dynamic extensions. This is particularly useful when you want to run awk scripts from questionable sources and need to make sure the scripts can't access your system (other than the specified input data file).
As long as program text has been supplied, any other options are flagged as invalid with a warning message but are otherwise ignored.
In compatibility mode, as a special case, if the value of fs supplied
to the -F option is ‘t’, then
FS is set to the TAB
"\t"). This is true only for --traditional and not
(see Field Separators).
The -f option may be used more than once on the command line. If it is, awk reads its program source from all of the named files, as if they had been concatenated together into one big file. This is useful for creating libraries of awk functions. These functions can be written once and then retrieved from a standard place, instead of having to be included into each individual program. (As mentioned in Definition Syntax, function names must be unique.)
With standard awk, library functions can still be used, even if the program is entered at the terminal, by specifying ‘-f /dev/tty’. After typing your program, type Ctrl-d (the end-of-file character) to terminate it. (You may also use ‘-f -’ to read program source from the standard input but then you will not be able to also use the standard input as a source of data.)
Because it is clumsy using the standard awk mechanisms to mix source file and command-line awk programs, gawk provides the --source option. This does not require you to pre-empt the standard input for your source code; it allows you to easily mix command-line and library source code (see AWKPATH Variable). The --source option may also be used multiple times on the command line.
If no -f or --source option is specified, then gawk uses the first non-option command-line argument as the text of the program source code.
If the environment variable POSIXLY_CORRECT exists, then gawk behaves in strict POSIX mode, exactly as if you had supplied the --posix command-line option. Many GNU programs look for this environment variable to suppress extensions that conflict with POSIX, but gawk behaves differently: it suppresses all extensions, even those that do not conflict with POSIX, and behaves in strict POSIX mode. If --lint is supplied on the command line and gawk turns on POSIX mode because of POSIXLY_CORRECT, then it issues a warning message indicating that POSIX mode is in effect. You would typically set this variable in your shell's startup file. For a Bourne-compatible shell (such as Bash), you would add these lines to the .profile file in your home directory:
POSIXLY_CORRECT=true export POSIXLY_CORRECT
For a C shell-compatible shell,1 you would add this line to the .login file in your home directory:
setenv POSIXLY_CORRECT true
Having POSIXLY_CORRECT set is not recommended for daily use, but it is good for testing the portability of your programs to other environments.
 Not recommended.