占据多行的记录的处理方法

占据多行的记录的处理方法

Content #

变量RS和ORS定义了gawk对数据流中记录的处理方式。在默认情况下,gawk会将 RS和ORS设置为换行符。默认的RS值表明,输入数据流中的每行文本就是一条记录。

有时,你会在数据流中碰到占据多行的记录,典型的例子是在包含地址和电话号码的数据中,地址和电话号码各占一行: Ima Test 123 Main Street Chicago, IL 60601 (312)555-1234 如果用默认的FS变量值和RS变量值来读取这组数据,gawk就会把每一行作为一条单独的记录来读取,并将其中的空格作为字段分隔符。这可不是你希望看到的。

要解决这个问题,需要把FS变量设置成换行符。这就表明数据流中的每一行都是一个单独的字段,行内的所有数据都属于同一个数据字段。但是,让人头疼的是不知道新记录从何处开始。

为此,可以把RS变量设置成空字符串,然后在数据记录之间留一个空行。gawk会把每一个空行都视为记录分隔符。下面的例子采用了这种方法: $ cat data2 Ima Test 123 Main Street Chicago, IL 60601 (312)555-1234

Frank Tester 456 Oak Street Indianapolis, IN 46201 (317)555-9876

Haley Example 4231 Elm Street Detroit, MI 48201 (313)555-4938 $ gawk ‘BEGIN{FS="\n"; RS=""} {print $1,$4}’ data2 Ima Test (312)555-1234 Frank Tester (317)555-9876 Haley Example (313)555-4938 $ gawk现在将文件中的每一行都视为一个字段,将空行作为记录分隔符。

From #

Linux命令行与shell脚本编程大全