關(guān)于Unix awk的記錄的知識(shí)講解
Unix操作系統(tǒng)有很多值得學(xué)習(xí)的地方,我們今天來(lái)講解一下Unix awk的記錄的知識(shí)。前面說(shuō)過(guò),Unix awk處理的工作與數(shù)據(jù)庫(kù)的處理方式有相同之處,其相同處之一就是Unix awk支持對(duì)記錄和字段的處理,其中對(duì)字段的處理是grep和sed不能實(shí)現(xiàn)的,這也是awk優(yōu)于二者的原因之一。
你可能對(duì)Unix比較熟悉,但你可能對(duì)Unix awk很陌生,這一點(diǎn)也不奇怪,的確,與其優(yōu)秀的功能相比,awk還遠(yuǎn)沒(méi)達(dá)到它應(yīng)有的知名度。
當(dāng)然讀者要真正地掌握Unix awk,僅僅讀了本文是不夠的,還必須有上機(jī)實(shí)習(xí)這一步。值得提醒大家的是,Unix awk有很多版本,并且各個(gè)版本之間存在著一些差別,因此,在使用awk以前***參考一下你使用的系統(tǒng)的聯(lián)機(jī)幫助。
在Unix awk中,缺省的情況下總是將文本文件中的一行視為一個(gè)記錄,而將一行中的某一部分作為記錄中的一個(gè)字段。為了操作這些不同的字段,awk借用shell的方法,用$1,$2,$3...這樣的方式來(lái)順序地表示行(記錄)中的不同字段。特殊地,Unix awk用$0表示整個(gè)行(記錄)。不同的字段之間是用稱作分隔符的字符分隔開(kāi)的。
系統(tǒng)默認(rèn)的分隔符是空格。Unix awk允許在命令行中用-F re的形式來(lái)改變這個(gè)分隔符。事實(shí)上,Unix awk用一個(gè)內(nèi)置的變量FS來(lái)記憶這個(gè)分隔符。Unix awk中有好幾個(gè)這樣的內(nèi)置變量,例如,記錄分隔符變量RS、當(dāng)前工作的記錄數(shù)NR等等,本文后面的附表列出了全部的內(nèi)置變量。
這些內(nèi)置的變量可以在Unix awk程序中引用或修改,例如,你可以利用NR變量在模式匹配中指定工作范圍,也可以通過(guò)修改記錄分隔符RS讓一個(gè)特殊字符而不是換行符作為記錄的分隔符。
例:顯示文本文件myfile中第七行到第十五行中以字符%分隔的***字段,第三字段和第七字段:
- awk -F % 'NR==7,NR==15 {printf $1 $3 $7}'
【編輯推薦】