?? gawk 手冊(cè).htm
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0046)http://www.chinalinuxpub.com/doc/pro/gawk.html -->
<HTML><HEAD><TITLE>GAWK 手冊(cè)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY>
<DIV align=center>
<CENTER>
<TABLE height=154 width=750 border=0>
<TBODY>
<TR>
<TD width=683 height=154>
<P align=center><BIG><BIG><FONT color=#ff9900>GAWK
手冊(cè)<BR></FONT></BIG></BIG></P>
<P align=center><FONT color=#ff9900>作者:<A
href="mailto:rezaie@softhome.net">Wilbur Lang</A></FONT></P>
<P align=center><A
href="http://www.chinalinuxpub.com/doc/pro/gawk.html#01"><FONT
color=#0066ff>第一章 前言</FONT></A><FONT color=#0066ff><BR><A
href="http://www.chinalinuxpub.com/doc/pro/gawk.html#02">第二章 簡介 </A><BR><A
href="http://www.chinalinuxpub.com/doc/pro/gawk.html#03">第三章 讀取輸入檔案
</A><BR><A href="http://www.chinalinuxpub.com/doc/pro/gawk.html#04">第四章 印出
</A><BR><A href="http://www.chinalinuxpub.com/doc/pro/gawk.html#05">第五章
Patterns </A><BR><A
href="http://www.chinalinuxpub.com/doc/pro/gawk.html#06">第六章
算式(Expression)作為Actions的敘述 </A><BR><A
href="http://www.chinalinuxpub.com/doc/pro/gawk.html#07">第七章
Actions里面的控制敘述 </A><BR><A
href="http://www.chinalinuxpub.com/doc/pro/gawk.html#08">第八章 內(nèi)建函式(Built-in
Functions) </A><BR><A
href="http://www.chinalinuxpub.com/doc/pro/gawk.html#09">第九章 使用者定義的函式
</A><BR><A href="http://www.chinalinuxpub.com/doc/pro/gawk.html#10">第十章 □例
</A><BR><A href="http://www.chinalinuxpub.com/doc/pro/gawk.html#11">第十一章
結(jié)論 </A><BR><BR></FONT><A name=01><FONT color=#ff9900>第一章 前言</FONT></A>
<FONT color=#0066ff><BR><BR>awk 是一個(gè)程式語言,對(duì)於資料的處理具有很強(qiáng)的功能。對(duì)於文
<BR>字檔里的資料做修改、比對(duì)、抽取等的處理,awk 能夠以很短的程式 <BR>輕易地完成。如果使用 C 或 Pascal
等語言寫程式完成上述的動(dòng)作, <BR>會(huì)不方便且很花費(fèi)時(shí)間,所寫的程式也會(huì)很大。 <BR><BR>awk
能夠依照使用者的定義格式來分解輸入資料,也可依照使用 <BR>者定義的格式來印出資料。 <BR><BR>awk
名稱的由來是由它的原始設(shè)計(jì)者的姓氏之第一個(gè)字母而命名 <BR>:Alfred V. Aho, Peter J. Weinberger, Brian
W. Kernighan。 <BR>awk最初在1977年完成。一個(gè)新版本的awk在1985年被發(fā)表,它的功能 <BR>比舊版本增強(qiáng)不少。
<BR><BR>gawk 是GNU所做的 awk,gawk 最初在1986年完成,之後不斷地 <BR>被改進(jìn)、更新。gawk 包含 awk
的所有功能。 <BR><BR>往後的 gawk 將以下面的2個(gè)輸入檔案來做例子說明。 <BR><BR>檔案'BBS-list':
<BR>aardvark 555-5553 1200/300 B <BR>alpo-net 555-3412 2400/1200/300 A
<BR>barfly 555-7685 1200/300 A <BR>bites 555-1675 2400/1200/300 A
<BR>camelot 555-0542 300 C <BR>core 555-2912 1200/300 C <BR>fooey 555-1234
2400/1200/300 B <BR>foot 555-6699 1200/300 B <BR>macfoo 555-6480 1200/300
A <BR>sdace 555-3430 2400/1200/300 A <BR>sabafoo 555-2127 1200/300 C
<BR><BR><BR>檔案'shipped': <BR>Jan 13 25 15 115 <BR>Feb 15 32 24 226 <BR>Mar
15 24 34 228 <BR>Apr 31 52 63 420 <BR>May 16 34 29 208 <BR>Jun 31 42 75
492 <BR>Jul 24 34 67 436 <BR>Aug 15 34 47 316 <BR>Sep 13 55 37 277 <BR>Oct
29 54 68 525 <BR>Nov 20 87 82 577 <BR>Dec 17 35 61 401 <BR><BR>Jan 21 36
64 620 <BR>Feb 26 58 80 652 <BR>Mar 24 75 70 495 <BR>Apr 21 70 74 514
<BR><BR><BR><BR><A name=02></A></FONT><A name=02><FONT color=#ff9900>第二章
簡介</FONT> </A><FONT color=#ff9900><BR></FONT><FONT color=#0066ff><BR>gawk
的主要功能是針對(duì)檔案的每一行(line)搜尋指定的 patterns <BR>。當(dāng)一行里有符合指定的 patterns,gawk
就會(huì)在此一行執(zhí)行被指定 <BR>的 actions。 gawk 依此方式處理輸入檔案的每一行直到輸入檔案結(jié) <BR>束。 <BR><BR>gawk
程式是由很多的 pattern 與 action 所組成,action 寫在 <BR>大括號(hào) { }
里面,一個(gè)pattern後面就跟著一個(gè)action。整個(gè) gawk 程 <BR>式會(huì)像下面的樣子: <BR><BR>pattern {action}
<BR>pattern {action} <BR><BR>在 gawk 程式里面的規(guī)則,pattern 或 action 能夠被省略,但
<BR>是兩個(gè)不能同時(shí)被省略。如果 pattern 被省略,對(duì)於輸入檔里面的 <BR>每一行,action 都會(huì)被執(zhí)行。如果 action
被省略,內(nèi)定的 action <BR>則會(huì)印出所有符合 pattern 的輸入行。 <BR><BR><BR><BR>2.1 如何執(zhí)行g(shù)awk程式
<BR><BR>基本上,有2個(gè)方法可以執(zhí)行g(shù)awk程式。 <BR><BR>□如果 gawk 程式很短,則 gawk 可以直接寫在 command
line,如下所示: <BR><BR>gawk 'program' input-file1 input-file2 ... <BR><BR>其中
program 包括一些 pattern 和 action。 <BR><BR>□如果 gawk 程式較長,較為方便的做法是將 gawk
程式存在一個(gè)檔案, <BR>即 patterns 與 actions 寫在檔名為 program-file 的檔案里面,執(zhí)行 <BR>gawk
的格式如下所示: <BR><BR>gawk -f program-file input-file1 input-file2 ...
<BR><BR>gawk 程式的檔案不止一個(gè)時(shí),執(zhí)行g(shù)awk 的格式如下所示: <BR><BR>gawk -f program-file1 -f
program-file2 ... input-file1 <BR>input-file2 ... <BR><BR><BR><BR>2.2
一個(gè)簡單的例子 <BR><BR>現(xiàn)在我們舉一個(gè)簡單的例子,因?yàn)?gawk 程式很短,所以將 gawk 程 <BR>式直接寫在 command
line。 <BR><BR>gawk '/foo/ {print $0}' BBS-list <BR><BR>實(shí)際的 gawk 程式為 /foo/
{print $0}。/foo/ 為 pattern,意思為搜 <BR>尋輸入檔里的每一行是否含有子字串 'foo',如果含有 'foo' 則執(zhí)行
action。 <BR>action 為 print $0,是將現(xiàn)在這一行的內(nèi)容印出。BBS-list 是輸入的檔案。
<BR><BR>執(zhí)行完上述指令後,會(huì)印出下面的結(jié)果: <BR>fooey 555-1234 2400/1200/300 B <BR>foot
555-6699 1200/300 B <BR>macfoo 555-6480 1200/300 A <BR>sabafoo 555-2127
1200/300 C <BR><BR><BR><BR>2.3 一個(gè)較復(fù)雜的例子 <BR><BR>gawk '$1 == "Feb"
{sum=$2+$3} END {print sum}' shipped <BR><BR>現(xiàn)在這個(gè)例子會(huì)將輸入檔 'shipped' 的第一個(gè)欄位與
"Feb" 做比較 <BR>,如果相等,則其對(duì)應(yīng)的第2欄位與第3欄位的值會(huì)被加到變數(shù) sum。
<BR>對(duì)於輸入檔的每一行重復(fù)上述的動(dòng)作,直到輸入檔的每一行都被處理 <BR>過為止。最後將 sum 的值印出。END {print sum}
的意思為在所有的輸 <BR>入讀完之後,執(zhí)行一次 print sum 的動(dòng)作,也就是把 sum 的值印出。 <BR><BR>下面是執(zhí)行的結(jié)果:
<BR>84 <BR><BR><BR><A name=03></A></FONT><A name=03><FONT
color=#ff9900>第三章 讀取輸入檔案</FONT></A><FONT color=#ff9900><BR></FONT><FONT
color=#0066ff><BR>gawk的輸入可以從標(biāo)準(zhǔn)輸入或指定的檔案里讀取。輸入的讀取單
<BR>位被稱為”記錄”(records),gawk 在做處理時(shí),是一個(gè)記錄一個(gè)記 (p9 of 46)
<BR>錄地處理。每個(gè)記錄的內(nèi)定值是一行(line),一個(gè)記錄又被分為多個(gè) <BR>欄位(fields)。 <BR><BR><BR><BR>3.1
如何將輸入分解成記錄(records) <BR><BR>gawk 語言會(huì)把輸入分解成記錄(record)。記錄與記錄之間是以 <BR>record
separator 隔開,record separator 的內(nèi)定值是表示新一行的 <BR>字元(newline character),因此內(nèi)定的
record separator 使得文字 <BR>的每一行是一個(gè)記錄。 <BR><BR>record separator 隨著內(nèi)建變數(shù) RS
的改變而改變。RS 是一個(gè)字串, <BR>它的內(nèi)定值是"\n"。僅有 RS 的第一個(gè)字元是有效的,它被當(dāng)作 record
<BR>separator,而 RS 的其它字元會(huì)被忽略。 <BR><BR>內(nèi)建變數(shù) FNR 會(huì)儲(chǔ)存目前的輸入檔案已頸歡寥〉募鍬賈
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -