AWK记录分隔符设置为空行不起作用

时间:2016-01-20 19:39:23

标签: bash awk multiline separator

我正在尝试编写一个简单的AWK脚本,该脚本使用空行作为记录分隔符。我在我的电脑上重现了GNU AWK手册Multiple-Line Records中的例子。我复制下面的代码:

# addrs.awk --- simple mailing list program

# Records are separated by blank lines.
# Each line is one field.
BEGIN { RS = "" ; FS = "\n" }

{
      print "Name is:", $1
      print "Address is:", $2
      print "City and State are:", $3
      print ""
}

输入是:

Jane Doe
123 Main Street
Anywhere, SE 12345-6789

John Smith
456 Tree-lined Avenue
Smallville, MW 98765-4321

文件在UNIX系统上创建。

必需的输出是:

Name is: Jane Doe
Address is: 123 Main Street
City and State are: Anywhere, SE 12345-6789

Name is: John Smith
Address is: 456 Tree-lined Avenue
City and State are: Smallville, MW 98765-4321

相反,我得到的结果与预期结果不同。我得到的是:

Name is: Jane Doe
Address is: 123 Main Street
City and State are: Anywhere, SE 12345-6789

有人知道我为什么得到错误的结果吗? AWK只找到1条记录而不是2条记录,你知道为什么吗?

1 个答案:

答案 0 :(得分:2)

这是为了确认:

(1)给定程序使用awk version 20070501gawkmawk正常工作,前提是输入文件有裸线('\ n')行结尾(相对于CR LF)。

(2)如果输入是DOS文本文件,则结果如OP所述。

此外,如果输入文件是DOS文本文件,dos2unix的替代方法是使用tr,如下所示:

$ tr -d '\r' < input.dos.txt | awk ....