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.