[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
2.2 Command-Line Options
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:
-
-F fs
-
--field-separator fs
-
Set the
FS
variable to fs (see section Specifying How Fields Are Separated). -
-f source-file
-
--file source-file
-
Read
awk
program source from source-file instead of in the first non-option argument. This option may be given multiple times; theawk
program consists of the concatenation the contents of each specified source-file. -
-v var=val
-
--assign var=val
-
Set the variable var to the value val before execution of the program begins. Such variable values are available inside the
BEGIN
rule (see section Other Command-Line 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. -
-W gawk-opt
-
Provide an implementation-specific option. This is the POSIX convention for providing implementation-specific options. These options also have corresponding GNU-style long options. Note that the long options may be abbreviated, as long as the abbreviations remain unique. The full list of
gawk
-specific options is provided next. -
--
-
Signal the end of the command-line options. The following arguments are not treated as options even if they begin with ‘-’. This interpretation of ‘--’ follows the POSIX argument parsing conventions.
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 Processing Command-Line Options.
The following list describes gawk
-specific options:
-
-b
-
--characters-as-bytes
-
Cause
gawk
to treat all input data 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 tellgawk
: “hands off my data!”. -
-c
-
--traditional
-
Specify compatibility mode, in which the GNU extensions to the
awk
language are disabled, so thatgawk
behaves just like Brian Kernighan’s versionawk
. See section Extensions ingawk
Not in POSIXawk
, which summarizes the extensions. Also see Downward Compatibility and Debugging. -
-C
-
--copyright
-
Print the short version of the General Public License and then exit.
-
-d[file]
-
--dump-variables[=file]
-
Print a sorted list of global variables, their types, and final values to file. If no file is provided, print this list to the file named ‘awkvars.out’ in the current directory. No space is allowed between the ‘-d’ and file, if file is supplied.
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 names like
i
,j
, etc.) -
-e program-text
-
--source program-text
-
Provide program source code in the program-text. This option allows you to mix source code in files with source code that you enter on the command line. This is particularly useful when you have library functions that you want to use from your command-line programs (see section The
AWKPATH
Environment Variable). -
-E file
-
--exec file
-
Similar to ‘-f’, read
awk
program text from file. There are two differences from ‘-f’:-
This option terminates option processing; anything
else on the command line is passed on directly to the
awk
program. - Command-line variable assignments of the form ‘var=value’ are disallowed.
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 section Executableawk
Programs), like so:#! /usr/local/bin/gawk -E awk program here …
-
This option terminates option processing; anything
else on the command line is passed on directly to the
-
-g
-
--gen-pot
-
Analyze the source program and generate a GNU
gettext
Portable Object Template file on standard output for all string constants that have been marked for translation. See section Internationalization withgawk
, for information about this option. -
-h
-
--help
-
Print a “usage” message summarizing the short and long style options that
gawk
accepts and then exit. -
-L [value]
-
--lint[=value]
-
Warn about constructs that are dubious or nonportable to other
awk
implementations. Some warnings are issued whengawk
first reads your program. Others are issued at runtime, as your program executes. With an optional argument of ‘fatal’, lint warnings become fatal errors. This may be drastic, but its use will certainly encourage the development of cleanerawk
programs. With an optional argument of ‘invalid’, only warnings about things that are actually invalid are issued. (This is not fully implemented yet.)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. Asawk
programs are usually short, doing so is not burdensome. -
-n
-
--non-decimal-data
-
Enable automatic interpretation of octal and hexadecimal values in input data (see section Allowing Nondecimal Input Data).
CAUTION: This option can severely break old programs. Use with care.
-
-N
-
--use-lc-numeric
-
Force the use of the locale’s decimal point character when parsing numeric input data (see section Where You Are Makes A Difference).
-
-O
-
--optimize
-
Enable some optimizations on the internal representation of the program. At the moment this includes just simple constant folding. The
gawk
maintainer hopes to add more optimizations over time. -
-p[file]
-
--profile[=file]
-
Enable profiling of
awk
programs (see section Profiling Yourawk
Programs). By default, profiles are created in a file named ‘awkprof.out’. The optional file argument allows you to specify a different file name for the profile file. No space is allowed between the ‘-p’ and file, if file is supplied.When run with
gawk
, the profile is just a “pretty printed” version of the program. When run withpgawk
, the profile contains execution counts for each statement in the program in the left margin, and function call counts for each function. -
-P
-
--posix
-
Operate in strict POSIX mode. This disables all
gawk
extensions (just like ‘--traditional’) and disables all extensions not allowed by POSIX. See section Common Extensions Summary, for a summary of the extensions ingawk
that are disabled by this option. Also, the following additional restrictions apply:-
Newlines do not act as whitespace to separate fields when
FS
is equal to a single space (see section Examining Fields). - Newlines are not allowed after ‘?’ or ‘:’ (see section Conditional Expressions).
-
Specifying ‘-Ft’ on the command-line does not set the value
of
FS
to be a single TAB character (see section Specifying How Fields Are Separated). - The locale’s decimal point character is used for parsing input data (see section Where You Are Makes A Difference).
If you supply both ‘--traditional’ and ‘--posix’ on the command line, ‘--posix’ takes precedence.
gawk
also issues a warning if both options are supplied. -
-r
-
--re-interval
-
Allow interval expressions (see section Regular Expression Operators) in regexps. This is now
gawk
’s default behavior. Nevertheless, this option remains both for backward compatibility, and for use in combination with the ‘--traditional’ option. -
-R file
-
--command=file
-
dgawk
only. Readdgawk
debugger options and commands from file. See section Obtaining Information About The Program and The Debugger State, for more information. -
-S
-
--sandbox
-
Disable the
system()
function, input redirections withgetline
, output redirections withprint
andprintf
, and dynamic extensions. This is particularly useful when you want to runawk
scripts from questionable sources and need to make sure the scripts can’t access your system (other than the specified input data file). -
-t
-
--lint-old
-
Warn about constructs that are not available in the original version of
awk
from Version 7 Unix (see section Major Changes Between V7 and SVR3.1). -
-V
-
--version
-
Print version information for this particular copy of
gawk
. This allows you to determine if your copy ofgawk
is up to date with respect to whatever the Free Software Foundation is currently distributing. It is also useful for bug reports (see section Reporting Problems and Bugs).
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
character ("\t"
). This is true only for ‘--traditional’ and not
for ‘--posix’
(see section Specifying How Fields Are Separated).
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
Function 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 section The AWKPATH
Environment 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 turn on
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,(13) 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.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |