awk 筆記

連結-餃子出版社【餃子出品.必屬佳作】

awk ‘AWK_SCRIPT_檔’ var=value 要處理的檔案    # var=value可以讓你在命令列指定你的awk變數與其值
awk -f scriptfile var=value files         # 跟上面的意思一樣

var ~ /re/
var !~ /re/
在awk 中,regular expression 可以拿來跟variable 直接比對,也會回傳true/false, 可以當condition 用

基本架構
BEGIN {xxx} /re/{xxx} END{xxx}
1.
# 算算有幾個空白行
$ awk ‘BEGIN{x=0} /^$/{x++} END{print x}’ scripts.tex
# 注意變數沒有$符號,跟shell, perl不同

# 一行稱為一個record
# record中的每個欄位稱為field(用space or tab隔開)

2.
$ awk ‘/swap/{print $2}’ /etc/mnttab
# 這個程式會在找到swap時
# 把那一行的第二個欄位印出來

3.
$ awk ‘{print “Hello World”}’ /etc/mnttab
# 沒有指定regular expression
# /etc/mnttab 內容有幾行,就印出幾行hello word

4.
$ awk ‘{print $1 $2}’ datafile
# 這樣的話,印出來的內容會黏在一起
$ awk ‘{print $1,$2}’ datafile
# 加上comma, 會在印出的內容用空白分開

內定變數
ARGC    參數數目
ARGV    參數array
$0    整行 record
ENVIRON        環境變數array
FILENAME
FS        field separator(default: space, tab)
OFS        output field separator(default:space)
RS        record separator(default: newline)
ORS        output record separator(同上)
NF        number of field
NR        number of record

5.
// 範例五
$ cat datafile
# This is the data file from experiment
99      98 3.5
300     298 4.9
498     493 5.9
# Failed data
122     123
699     698 7.6
900     748 9.0
1200    703 9.6
1500    651 10.4
1698    627 10.8

$ awk ‘NF == 3 && $1 ~ /[0-9]+/{print $3,$1,$2}’ datafile
3.5 99 98
4.9 300 298
5.9 498 493
7.6 699 698
9.0 900 748
9.6 1200 703
10.4 1500 651
10.8 1698 627
// 範例五

awk 的array是從1開始,也可以用id(因為其實是associative array)
可用split(string, array, [sep])得到一個array
6.
$ cat split.awk
#! /bin/awk
BEGIN{FS=”:”}
/cyril/{
print $0
split($0, afield)
for (i = 0; i

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: