2006-12-04

awk的使用

目前需要寫幾個小東西, 之前看過awk的用法,想來很適合目前的工作
這邊有個找到的資料
希望派的上用場



AWK主要結構

Pattern { Actions }

Pattern: relational operation
>, <, >=, <=, ==, !=, ~, !~

Actions: I/O command, scenario control command
print, printf(), getline
if(...) {...} else {...}, while(...) {...}

if pattern is true, we do actions!



AWK欄位變數

$0  一字串,目前AWK讀入的資料列
$1  代表$0上第一個欄位的資料
$2  代表$0上第二個欄位的資料
$3  代表$0上第三個欄位的資料
...  ...



AWK內建變數


NF     表$0上讀入的欄位數目
NR     AWK已讀入的資料列數目
FILENAME AWK正在處理的資料檔名

UNIX命令列上, AWK的用法為
# awk '{print $1, $2, $3 * $4}' file.data

而符號 ' 是用來夾住pattern{actions}的, 另外, 若是程式太大需要寫在別的檔案裡頭,則
# awk -f program.awk file.data



AWK的Regular Expression

/... / 常用來包住Regexp
^ 表示該字串出現在字首 (ex. /^the/)
$ 表示該字串出現在字尾 (ex. /the$/)
. 表示為任一字元
* 表示為前字元出現重複次數的字元(ex. /a*/用來比對a不管有無出現或是出現多次的情況)
+ 表示為前字元出現一次以上的字元(ex. /a+/用來比對a至少出現一次以上)
? 表示為前字元不出現或是只出現一次(ex. /a?/用來比對a不出現或只出現一次)
\ 則為跳脫字元 (ex. /filename\.suf/)
[...] 表示為字元集合 (ex. [ab] 用來比對[a]或[b])
[..-..] 表示字元範圍 (ex. [0-5]用來比對[12345])
[^...] 表示字元的補集(ex. [^a]用來比對非[a]以外的字元)
(...) 用來括住一群字元成為一段字串(ex. /(ab)+/用來比對ab, abab, ababab等)
| 表示為判斷的或(ex. /os | apps/用來比對os, apps)

No comments: