📄 00000000.htm
字号:
的 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>第三章 读取输入档案 <BR> <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 + -