fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sabafoo 555-2127 1200/300 C2.3 一个较复杂的例子gawk "$1 == "Feb" {sum=$2 $3} END {print sum}" shipped现在这个例子会将输入档 "shipped" 的第一个栏位与 "Feb" 做比较
, 如果相等 , 则其对应的第2栏位与第3栏位的值会被加到变数 sum 。
对於输入档的每一行重复上述的动作 , 直到输入档的每一行都被处理
过为止 。最後将 sum 的值印出 。END {print sum} 的意思为在所有的输
入读完之後 , 执行一次 print sum 的动作 , 也就是把 sum 的值印出 。下面是执行的结果:
84
第三章 读取输入档案gawk的输入可以从标准输入或指定的档案里读取 。输入的读取单
位被称为”记录”(records) , gawk 在做处理时 , 是一个记录一个记 (p9 of 46)
录地处理 。每个记录的内定值是一行(line) , 一个记录又被分为多个
栏位(fIElds) 。3.1 如何将输入分解成记录(records)gawk 语言会把输入分解成记录(record) 。记录与记录之间是以
record separator 隔开 , record separator 的内定值是表示新一行的
字元(newline character) , 因此内定的 record separator 使得文字
的每一行是一个记录 。record separator 随著内建变数 RS 的改变而改变 。RS 是一个字串 ,
它的内定值是" " 。仅有 RS 的第一个字元是有效的 , 它被当作 record
separator , 而 RS 的其它字元会被忽略 。内建变数 FNR 会储存目前的输入档案已颈欢寥〉募锹贾鍪D
建变数 NR 会储存目前为止所有的输入档案已颈欢寥〉募锹贾鍪3.2 栏位(field)gawk 会自动将每个记录分解成多个栏位 (field) 。类似於字在一
行里面 , gawk 的内定动作会认为栏位之间是以 whitespace 分开 。在
gawk 里 , whitespace 的意思是一个或多个空白或 tabs 。在 gawk 程式里面 , 以"$1"表示第一个栏位 , "$2"表示第二个栏位
, 依此类推 。举个例子 , 假设输入的一行如下所示:This seems like a pretty nice example.第一个栏位或 $1 是"This" , 第二个栏位或 $2 是 "seems" , 依此类推 。
有个地方值得特别注意 , 第七个栏位或 $7 是"example."而非"example" 。不论有多少栏位 , $NF 可用来表示一个记录的最後一个栏位 。以
上面的例子为例 , $NF 与 $7 相同 , 也就是"example." 。NF 是一个内建变数 , 它的值表示目前这个记录之栏位的个数 。$0 , 看起来好像是第零个栏位 , 它是一个特例 , 它表示整个记录 。下面是一个较复杂的例子:gawk "$1~/foo/ {print $0}" BBS-list结果如下:
fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sabafoo 555-2127 1200/300 C这个例子是把输入档"BBS-list"的每个记录的第一个栏位作检查 , 如
果它含有子字串"foo" , 则这一个记录会被印出 。3.3 如何将记录分解成栏位gawk 根据 field separator 将一个记录分解成栏位 。field sepa- rator 以内建变数 FS 表示 。举个例子 , 假如 field separator 是"oo" , 则下面的行:moo goo gai pan会被分成三个栏位:"m"、" g"、" gai pan" 。在 gawk 程式里 , 可以使用"="来改变 FS 的值 。例如:gawk "BEGIN {FS=","}; {print $2}"输入行如下:John Q. Smith, 29 Oak St., Walamazoo, MI 42139执行gawk的结果将印出字串 " 29 Oak St." 。BEGIN 後面的 action 会在
第一个记录被读取之前执行一次 。
第四章 印出在gawk程式里 , actions 最常做的事就是印出(printing) 。简单
的印出 , 使用 printe叙述 。复杂格式的印出 , 使用 printf 叙述 。4.1 print叙述print 叙述用在简单、标准的输出格式 。叙述的格式如下所示:print item1, item2, ...输出时 , 各个 item 之间会以一个空白分开 , 最後会换行(newline) 。如果 "print"叙述之後没有跟著任何东西 , 它与"print $0"的效
推荐阅读
- 8月4日 明基P50初期体验心得汇总2
- 王者嫦娥归月怎么用
- 口令篇 UNIX系统的安全
- 少是上下结构还是独体字 少是的结构
- 指标房和商品房的区别是什么
- 苹果花什么季节开的
- 卡西尼号探测器是探测什么系列天体的
- 12pro max背面是磨砂的吗
- sos求救信号如何在手机中设置
- 帮你做决定具体使用步骤介绍
