日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

gawk的使用方法( 二 )


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 一個(gè)較復(fù)雜的例子gawk "$1 == "Feb" {sum=$2 $3} END {print sum}" shipped現(xiàn)在這個(gè)例子會(huì)將輸入檔 "shipped" 的第一個(gè)欄位與 "Feb" 做比較
, 如果相等 , 則其對(duì)應(yīng)的第2欄位與第3欄位的值會(huì)被加到變數(shù) sum 。
對(duì)於輸入檔的每一行重復(fù)上述的動(dòng)作 , 直到輸入檔的每一行都被處理
過為止 。最後將 sum 的值印出 。END {print sum} 的意思為在所有的輸
入讀完之後 , 執(zhí)行一次 print sum 的動(dòng)作 , 也就是把 sum 的值印出 。下面是執(zhí)行的結(jié)果:
84

第三章 讀取輸入檔案gawk的輸入可以從標(biāo)準(zhǔn)輸入或指定的檔案里讀取 。輸入的讀取單
位被稱為”記錄”(records) , gawk 在做處理時(shí) , 是一個(gè)記錄一個(gè)記 (p9 of 46)
錄地處理 。每個(gè)記錄的內(nèi)定值是一行(line) , 一個(gè)記錄又被分為多個(gè)
欄位(fIElds) 。3.1 如何將輸入分解成記錄(records)gawk 語言會(huì)把輸入分解成記錄(record) 。記錄與記錄之間是以
record separator 隔開 , record separator 的內(nèi)定值是表示新一行的
字元(newline character) , 因此內(nèi)定的 record separator 使得文字
的每一行是一個(gè)記錄 。record separator 隨著內(nèi)建變數(shù) RS 的改變而改變 。RS 是一個(gè)字串 ,
它的內(nèi)定值是" " 。僅有 RS 的第一個(gè)字元是有效的 , 它被當(dāng)作 record
separator , 而 RS 的其它字元會(huì)被忽略 。內(nèi)建變數(shù) FNR 會(huì)儲(chǔ)存目前的輸入檔案已頸歡寥〉募鍬賈鍪?。?
建變數(shù) NR 會(huì)儲(chǔ)存目前為止所有的輸入檔案已頸歡寥〉募鍬賈鍪3.2 欄位(field)gawk 會(huì)自動(dòng)將每個(gè)記錄分解成多個(gè)欄位 (field) 。類似於字在一
行里面 , gawk 的內(nèi)定動(dòng)作會(huì)認(rèn)為欄位之間是以 whitespace 分開 。在
gawk 里 , whitespace 的意思是一個(gè)或多個(gè)空白或 tabs 。在 gawk 程式里面 , 以"$1"表示第一個(gè)欄位 , "$2"表示第二個(gè)欄位
, 依此類推 。舉個(gè)例子 , 假設(shè)輸入的一行如下所示:This seems like a pretty nice example.第一個(gè)欄位或 $1 是"This" , 第二個(gè)欄位或 $2 是 "seems" , 依此類推 。
有個(gè)地方值得特別注意 , 第七個(gè)欄位或 $7 是"example."而非"example" 。不論有多少欄位 , $NF 可用來表示一個(gè)記錄的最後一個(gè)欄位 。以
上面的例子為例 , $NF 與 $7 相同 , 也就是"example." 。NF 是一個(gè)內(nèi)建變數(shù) , 它的值表示目前這個(gè)記錄之欄位的個(gè)數(shù) 。$0 , 看起來好像是第零個(gè)欄位 , 它是一個(gè)特例 , 它表示整個(gè)記錄 。下面是一個(gè)較復(fù)雜的例子:gawk "$1~/foo/ {print $0}" BBS-list結(jié)果如下:
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這個(gè)例子是把輸入檔"BBS-list"的每個(gè)記錄的第一個(gè)欄位作檢查 , 如
果它含有子字串"foo" , 則這一個(gè)記錄會(huì)被印出 。3.3 如何將記錄分解成欄位gawk 根據(jù) field separator 將一個(gè)記錄分解成欄位 。field sepa- rator 以內(nèi)建變數(shù) FS 表示 。舉個(gè)例子 , 假如 field separator 是"oo" , 則下面的行:moo goo gai pan會(huì)被分成三個(gè)欄位:"m"、" g"、" gai pan" 。在 gawk 程式里 , 可以使用"="來改變 FS 的值 。例如:gawk "BEGIN {FS=","}; {print $2}"輸入行如下:John Q. Smith, 29 Oak St., Walamazoo, MI 42139執(zhí)行g(shù)awk的結(jié)果將印出字串 " 29 Oak St." 。BEGIN 後面的 action 會(huì)在
第一個(gè)記錄被讀取之前執(zhí)行一次 。
第四章 印出在gawk程式里 , actions 最常做的事就是印出(printing) 。簡單
的印出 , 使用 printe敘述 。復(fù)雜格式的印出 , 使用 printf 敘述 。4.1 print敘述print 敘述用在簡單、標(biāo)準(zhǔn)的輸出格式 。敘述的格式如下所示:print item1, item2, ...輸出時(shí) , 各個(gè) item 之間會(huì)以一個(gè)空白分開 , 最後會(huì)換行(newline) 。如果 "print"敘述之後沒有跟著任何東西 , 它與"print $0"的效

推薦閱讀