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 ....
首先,创建一个文本文件 command.awk ,其中包含以下所示的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] 选项
此选项启用对非可移植或可疑结构的检查。当提供参数 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 兼容性,禁用所有常见和 gawk 特定的扩展。
--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.