2016-01-20 95 views
0

我想寫一個簡單的AWK腳本,它使用空行作爲記錄分隔符。我在我的電腦上覆制了GNU AWK手冊Multiple-Line Records的例子。我下面的代碼複製:AWK記錄分隔符設置爲空行不工作

# 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條,你知道爲什麼嗎?

+4

您的電流輸出看起來是正確的。請用2個樣本輸入記錄更新您的Q,並至少從其中一個記錄中輸出您的要求輸出。另外,如果Windows涉及到創建數據文件,請使用'dos2unix datafile'清理它。祝你好運。 – shellter

+2

試過了,它在OS X上工作時應該是這樣的 –

+0

在我的老山SUSE盒子上工作正常 – JNevill

回答

2

這是爲了確認:

(1)給定的程序工作正常使用awk version 20070501gawk,或mawk,所提供的輸入文件具有裸換行符(「\ n」)行結束(相對於CR如果)。 (2)如果輸入是DOS文本文件,則結果如OP所述。

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

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

謝謝,現在它工作。仍然不知道爲什麼我再次複製和粘貼,它的工作... – mike

相關問題