學(xué)習(xí)Unix awk高級(jí)輸入方法
我們?cè)趯W(xué)習(xí)Unix awk的時(shí)候,已經(jīng)講解過(guò)Unix awk的許多的知識(shí)。當(dāng)然讀者要真正地掌握Unix awk,僅僅讀了本文是不夠的,還必須有上機(jī)實(shí)習(xí)這一步。值得提醒大家的是,Unix awk有很多版本,并且各個(gè)版本之間存在著一些差別,因此,在使用awk以前最好參考一下你使用的系統(tǒng)的聯(lián)機(jī)幫助。
1.讀取下一條記錄:
Unix awk的next語(yǔ)句導(dǎo)致Unix awk讀取下一個(gè)記錄并完成模式匹配,然后立即執(zhí)行相應(yīng)的操作。通常它用匹配的模式執(zhí)行操作中的代碼。next導(dǎo)致這個(gè)記錄的任何額外匹配模式被忽略。
2.簡(jiǎn)單地讀取一條記錄
Unix awk的 getline語(yǔ)句用于簡(jiǎn)單地讀取一條記錄。如果用戶(hù)有一個(gè)數(shù)據(jù)記錄類(lèi)似兩個(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被增值。
用戶(hù)也可以使用Unix awk的 getline<"filename"方式從一個(gè)給定的文件中輸入數(shù)據(jù),而不是從命令行所列內(nèi)容輸入數(shù)據(jù)。此時(shí),getline將完成一般字段分離(設(shè)置字段變量$0和NF)。如果文件不存在,返回-1,成功,返回1,返回0表示失敗。
用戶(hù)可以從給定文件中讀取數(shù)據(jù)到一個(gè)變量中,也可以用stdin(標(biāo)準(zhǔn)輸入設(shè)備)或一個(gè)包含這個(gè)文件名的變量代替filename。值得注意的是當(dāng)使用這種方式時(shí)不修改FNR和NR。Unix awk高級(jí)輸入的知識(shí),就講解到這里。
【編輯推薦】