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}'
【编辑推荐】