Unix操作系統有很多值得學習的地方,我們今天來講解一下Unix awk的調用方式方面的知識。我們曾經說過,Unix awk提供了適應多種需要的不同解決方案,它們是:
一、Unix awk命令行,你可以象使用普通Unix命令一樣使用awk,在命令行中你也可以使用awk程序設計語言,雖然awk支持多行的錄入,但是錄入長長的命令行並保證其正確無誤卻是一件令人頭疼的事,因此,這種方法一般只用於解決簡單的問題。當然,你也可以在shell script程序中引用awk命令行甚至awk程序腳本。
二、使用-f選項調用Unix awk程序。awk允許將一段awk程序寫入一個文本文件,然後在awk命令行中用-f選項調用並執行這段程序。具體的方法我們將在後面的awk語法中講到。
三、利用命令解釋器調用awk程序:利用Unix支持的命令解釋器功能,我們可以將一段awk程序寫入文本文件,然後在它的第一行加上:
#!/bin/awk -f
並賦予這個文本文件以執行的權限。這樣做之後,你就可以在命令行中用類似於下面這樣的方式調用並執行這段awk程序了。
$awk腳本文本名 待處理文件
Unix awk的語法:
與其它Unix命令一樣,Unix awk擁有自己的語法:
awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
參數說明:
-F re:允許Unix awk更改其字段分隔符。
parameter: 該參數幫助為不同的變量賦值。
'prog': awk的程序語句段。這個語句段必須用單拓號:'和'括起,以防被shell解釋。這個程序語句段的標准形式為:
'pattern {action}'
其中pattern參數可以是egrep正則表達式中的任何一個,它可以使用語法/re/再加上一些樣式匹配技巧構成。與sed類似,你也可以使用","分開兩樣式以選擇某個范圍。
關於匹配的細節,你可以參考附錄,如果仍不懂的話,找本Unix書學學grep和sed(本人是在學習ed時掌握匹配技術的)。action參數總是被大括號包圍,它由一系統Unix awk語句組成,各語句之間用";"分隔。
Unix awk解釋它們,並在pattern給定的樣式匹配的記錄上執行其操作。與shell類似,你也可以使用“#”作為注釋符,它使“#”到行尾的內容成為注釋,在解釋執行時,它們將被忽略。
你可以省略pattern和action之一,但不能兩者同時省略,當省略pattern時沒有樣式匹配,表示對所有行(記錄)均執行操作,省略action時執行缺省的操作――在標准輸出上顯示。
-f progfile:允許awk調用並執行progfile指定有程序文件。progfile是一個文本文件,他必須符合Unix awk的語法。
in_file:awk的輸入文件,Unix awk允許對多個輸入文件進行處理。值得注意的是awk不修改輸入文件。如果未指定輸入文件,awk將接受標准輸入,並將結果顯示在標准輸出上。awk支持輸入輸出重定向。