我们所有的例子中用到的输入文件其记录都是由单独一行组成的。在这一部分,我们将演示如何读入一个记录,而记录中的每个字段都由单独一行组成。
前面我们了解了处理姓名和地址的文件的例子。让我们假设相同的数据保存在块格式的文件中。不是将所有的信息放置在一行,而是将人名放在一行,在下一行放置公司名、依此类推。下面是一个记录样本:
John Robinson
Koren Inc.
978 Commonwealth Ave.
Boston
MA 01760
696-0987
这个记录有6个字段,记录之间用空行分隔。为了处理这种包括多行数据的记录,我们可以将字段分隔符定义为换行符,换行符用"\n" 来表示,并将记录分隔符设置为空字符串,它代表一个空行。
BEGIN { FS = "\n";
RS = "" }
我们可以使用下面的脚本来打印第一个和最后一个字段:
$ cat block.awk
# block.awk -打印第一个和最后一个字段
# $1 = name; $NF = phone number
BEGIN { FS = "\n";
RS = "" }
{ print $1 , $NF}
例子的运行结果如下:
$ awk -f block.awk phones.block
John Robinson 696-0987
Phyllis Chapman 879-0900
Jeffrey Willis 914-636-0000
Alice Gold (707) 724-0000
Bill Gold 1-707-724-0000
这两个字段输出在同一行是因为默认的输出字段分隔符(OFS)仍然是一个空格。如果希望将这些字段输出在不同的行上,可以将OFS的值改变为一个换行符来实现。这样,你可能希望用空格将记录分隔开,因此必须将输出记录分隔符ORS设置为两个换行符。
参考资料:http://www.linuxawk.com/communication/497.html