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