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.
联系我们

邮箱 626512443@qq.com
电话 18611320371
QQ 626512443
QQ群 235681453

Copyright © 2015-2019

备案号:京ICP备15003423号-3