📄 gawk 手册.htm
字号:
<!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 手册</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
手册<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">第八章 内建函式(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">第十一章
结论 </A><BR><BR></FONT><A name=01><FONT color=#ff9900>第一章 前言</FONT></A>
<FONT color=#0066ff><BR><BR>awk 是一个程式语言,对於资料的处理具有很强的功能。对於文
<BR>字档里的资料做修改、比对、抽取等的处理,awk 能够以很短的程式 <BR>轻易地完成。如果使用 C 或 Pascal
等语言写程式完成上述的动作, <BR>会不方便且很花费时间,所写的程式也会很大。 <BR><BR>awk
能够依照使用者的定义格式来分解输入资料,也可依照使用 <BR>者定义的格式来印出资料。 <BR><BR>awk
名称的由来是由它的原始设计者的姓氏之第一个字母而命名 <BR>:Alfred V. Aho, Peter J. Weinberger, Brian
W. Kernighan。 <BR>awk最初在1977年完成。一个新版本的awk在1985年被发表,它的功能 <BR>比旧版本增强不少。
<BR><BR>gawk 是GNU所做的 awk,gawk 最初在1986年完成,之後不断地 <BR>被改进、更新。gawk 包含 awk
的所有功能。 <BR><BR>往後的 gawk 将以下面的2个输入档案来做例子说明。 <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
的主要功能是针对档案的每一行(line)搜寻指定的 patterns <BR>。当一行里有符合指定的 patterns,gawk
就会在此一行执行被指定 <BR>的 actions。 gawk 依此方式处理输入档案的每一行直到输入档案结 <BR>束。 <BR><BR>gawk
程式是由很多的 pattern 与 action 所组成,action 写在 <BR>大括号 { }
里面,一个pattern後面就跟著一个action。整个 gawk 程 <BR>式会像下面的样子: <BR><BR>pattern {action}
<BR>pattern {action} <BR><BR>在 gawk 程式里面的规则,pattern 或 action 能够被省略,但
<BR>是两个不能同时被省略。如果 pattern 被省略,对於输入档里面的 <BR>每一行,action 都会被执行。如果 action
被省略,内定的 action <BR>则会印出所有符合 pattern 的输入行。 <BR><BR><BR><BR>2.1 如何执行gawk程式
<BR><BR>基本上,有2个方法可以执行gawk程式。 <BR><BR>□如果 gawk 程式很短,则 gawk 可以直接写在 command
line,如下所示: <BR><BR>gawk 'program' input-file1 input-file2 ... <BR><BR>其中
program 包括一些 pattern 和 action。 <BR><BR>□如果 gawk 程式较长,较为方便的做法是将 gawk
程式存在一个档案, <BR>即 patterns 与 actions 写在档名为 program-file 的档案里面,执行 <BR>gawk
的格式如下所示: <BR><BR>gawk -f program-file input-file1 input-file2 ...
<BR><BR>gawk 程式的档案不止一个时,执行gawk 的格式如下所示: <BR><BR>gawk -f program-file1 -f
program-file2 ... input-file1 <BR>input-file2 ... <BR><BR><BR><BR>2.2
一个简单的例子 <BR><BR>现在我们举一个简单的例子,因为 gawk 程式很短,所以将 gawk 程 <BR>式直接写在 command
line。 <BR><BR>gawk '/foo/ {print $0}' BBS-list <BR><BR>实际的 gawk 程式为 /foo/
{print $0}。/foo/ 为 pattern,意思为搜 <BR>寻输入档里的每一行是否含有子字串 'foo',如果含有 'foo' 则执行
action。 <BR>action 为 print $0,是将现在这一行的内容印出。BBS-list 是输入的档案。
<BR><BR>执行完上述指令後,会印出下面的结果: <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 一个较复杂的例子 <BR><BR>gawk '$1 == "Feb"
{sum=$2+$3} END {print sum}' shipped <BR><BR>现在这个例子会将输入档 'shipped' 的第一个栏位与
"Feb" 做比较 <BR>,如果相等,则其对应的第2栏位与第3栏位的值会被加到变数 sum。
<BR>对於输入档的每一行重复上述的动作,直到输入档的每一行都被处理 <BR>过为止。最後将 sum 的值印出。END {print sum}
的意思为在所有的输 <BR>入读完之後,执行一次 print sum 的动作,也就是把 sum 的值印出。 <BR><BR>下面是执行的结果:
<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的输入可以从标准输入或指定的档案里读取。输入的读取单
<BR>位被称为”记录”(records),gawk 在做处理时,是一个记录一个记 (p9 of 46)
<BR>录地处理。每个记录的内定值是一行(line),一个记录又被分为多个 <BR>栏位(fields)。 <BR><BR><BR><BR>3.1
如何将输入分解成记录(records) <BR><BR>gawk 语言会把输入分解成记录(record)。记录与记录之间是以 <BR>record
separator 隔开,record separator 的内定值是表示新一行的 <BR>字元(newline character),因此内定的
record separator 使得文字 <BR>的每一行是一个记录。 <BR><BR>record separator 随著内建变数 RS
的改变而改变。RS 是一个字串, <BR>它的内定值是"\n"。仅有 RS 的第一个字元是有效的,它被当作 record
<BR>separator,而 RS 的其它字元会被忽略。 <BR><BR>内建变数 FNR 会储存目前的输入档案已颈欢寥〉募锹贾
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -