Unix awk的 getline語(yǔ)句及其它知識(shí)講解
通過(guò)以前我們講解的知識(shí),我們知道Unix awk的 getline語(yǔ)句用于簡(jiǎn)單地讀取一條記錄。如果用戶有一個(gè)數(shù)據(jù)記錄類似兩個(gè)物理記錄,那么getline將尤其有用。它完成一般字段的分離(設(shè)置字段變量$0 FNR NF NR)。如果成功則返回1,失敗則返回0(到達(dá)文件尾)。如果需簡(jiǎn)單地讀取一個(gè)文件,則可以編寫(xiě)以下代碼:
例:示例getline的使用
- {while(getline==1)
- {
- #process the inputted fields
- }
- }
Unix awk也可以使getline保存輸入數(shù)據(jù)在一個(gè)字段中,而不是通過(guò)使用getline variable的形式處理一般字段。當(dāng)使用這種方式時(shí),NF被置成0,F(xiàn)NR和NR被增值。
用戶也可以使用Unix awk的 getline<"filename"方式從一個(gè)給定的文件中輸入數(shù)據(jù),而不是從命令行所列內(nèi)容輸入數(shù)據(jù)。此時(shí),getline將完成一般字段分離(設(shè)置字段變量$0和NF)。如果文件不存在,返回-1,成功,返回1,返回0表示失敗。
用戶可以從給定文件中讀取數(shù)據(jù)到一個(gè)變量中,也可以用stdin(標(biāo)準(zhǔn)輸入設(shè)備)或一個(gè)包含這個(gè)文件名的變量代替filename。值得注意的是當(dāng)使用這種方式時(shí)不修改FNR和NR。
另一種使用getline語(yǔ)句的方法是從Unix命令接受輸入,例如下面的例子:
例:示例從Unix命令接受輸入
- {while("who -u"|getline)
- {
- #process each line from the who command
- }
- }
當(dāng)然,也可以使用如下形式:
"command" | getline variable
關(guān)閉文件:
Unix awk中允許在程序中關(guān)閉一個(gè)輸入或輸出文件,方法是使用Unix awk的close語(yǔ)句。
close("filename")
filename可以是getline打開(kāi)的文件(也可以是stdin,包含文件名的變量或者getline使用的確切命令)?;蛞粋€(gè)輸出文件(可以是stdout,包含文件名的變量或使用管道的確切命令)。
輸出到一個(gè)文件:
Unix awk中允許用如下方式將結(jié)果輸出到一個(gè)文件:
printf("hello word! ")>"datafile"
或
printf("hello word! ")>>"datafile"
輸出到一個(gè)命令
Unix awk中允許用如下方式將結(jié)果輸出到一個(gè)命令:
printf("hello word! ")|"sort-t','"
【編輯推薦】