AWK基本语法 - Awk教程

AWK使用简单,我们可以直接从命令行提供AWK或在具有AWK命令的文本文件的形式的命令。本教程介绍调用AWK的例子,这两个方法:

AWK命令行

以下是我们可指定单引号在命令行本身AWK命令的形式:

awk [options] file ...

示例

考虑我们有一个文本文件marks.txt将要处理,它有以下内容:

1)    Amit     Physics    80
2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

让我们使用AWK显示如下文件的全部内容:

[jerry]$ awk '{print}' marks.txt

在执行上面的代码后,得到以下结果:

1)    Amit     Physics    80
2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

AWK程序文件

以下是第二种形式,提供AWK命令在脚本文件中:

awk [options] -f file ....

首先,创建一个包含AWK命令的文本command.awk文件,如下所示:

{print}

现在,我们可以命令AWK从文本文件中读取命令并执行操作。在这里,实现相同的结果中所示的上述示例。

[jerry]$ awk -f command.awk marks.txt

在执行上面的代码后,得到以下结果:

1)    Amit     Physics    80
2)    Rahul    Maths      90
3)    Shyam    Biology    87
4)    Kedar    English    85
5)    Hari     History    89

AWK标准选项

AWK支持从命令行来提供以下标准选项。

-v 选项

此选项分配一个值的变量。它允许程序执行前分配。下面简单的例子介绍 -v 选项的使用。

[jerry]$ awk -v name=Jerry 'BEGIN{printf "Name = %s\n", name}'

在执行上面的代码后,得到以下结果:

Name = Jerry

--dump-variables[=file] 选项

它打印全局变量和最终值到文件的一个排序列表。默认的文件是awkvars.out。

[jerry]$ awk --dump-variables ''
[jerry]$ cat awkvars.out

在执行上面的代码后,得到以下结果:

ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "\n"
RLENGTH: 0
RS: "\n"
RSTART: 0
RT: ""
SUBSEP: "\034"
TEXTDOMAIN: "messages"

--help 选项

此选项将在标准输出的帮助信息。

[jerry]$ awk --help

在执行上面的代码后,得到以下结果:

Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:        GNU long options: (standard)
    -f progfile        --file=progfile
    -F fs            --field-separator=fs
    -v var=val        --assign=var=val
Short options:        GNU long options: (extensions)
    -b            --characters-as-bytes
    -c            --traditional
    -C            --copyright
    -d[file]        --dump-variables[=file]
    -e 'program-text'    --source='program-text'
    -E file            --exec=file
    -g            --gen-pot
    -h            --help
    -L [fatal]        --lint[=fatal]
    -n            --non-decimal-data
    -N            --use-lc-numeric
    -O            --optimize
    -p[file]        --profile[=file]
    -P            --posix
    -r            --re-interval
    -S            --sandbox
    -t            --lint-old
    -V            --version

--lint[=fatal] 选项

该选项允许检查非便携式或可疑的构造。当提供的一个参数是致命,它会警告消息为错误。下面简单的例子说明了这一点:

[jerry]$ awk --lint '' /bin/ls

在执行上面的代码后,得到以下结果:

awk: cmd. line:1: warning: empty program text on command line
awk: cmd. line:1: warning: source file does not end in newline
awk: warning: no program text at all!

--posix 选项

此选项打开严格的POSIX兼容,其中所有普通和awk特定的扩展将被禁用。

--profile[=file] 选项

这个选项生成文件的程序相当于打印版本。默认的文件是awkprof.out。下面简单的例子说明了这一点:

[jerry]$ awk --profile 'BEGIN{printf"---|Header|--\n"} {print} END{printf"---|Footer|---\n"}' marks.txt > /dev/null 
[jerry]$ cat awkprof.out

在执行上面的代码后,得到以下结果:

# gawk profile, created Sun Oct 26 19:50:48 2014

    # BEGIN block(s)

    BEGIN {
        printf "---|Header|--\n"
    }

    # Rule(s)

    {
        print $0
    }

    # END block(s)

    END {
        printf "---|Footer|---\n"
    }

--traditional 选项

此选项可以禁用所有gawk特定的扩展。

--version 选项

此选项显示AWK程序的版本信息。

[jerry]$ awk --version

当上述代码被执行时,它会产生以下结果:

GNU Awk 4.0.1
Copyright (C) 1989, 1991-2012 Free Software Foundation.