我正在尝试编写一个简单的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条记录,你知道为什么吗?
答案 0 :(得分:2)
这是为了确认:
(1)给定程序使用awk version 20070501
,gawk
或mawk
正常工作,前提是输入文件有裸线('\ n')行结尾(相对于CR LF)。
(2)如果输入是DOS文本文件,则结果如OP所述。
此外,如果输入文件是DOS文本文件,dos2unix
的替代方法是使用tr
,如下所示:
$ tr -d '\r' < input.dos.txt | awk ....