2016-04-15 31 views
0

我的文件只是一個行:爲什麼輸出最後會包含空行?

$ cat employee-one-line.txt 
101,John Doe:102,Jason Smith:103,Raj Reddy:104,Anand Ram:105,Jane Miller 
$ 

但執行以下awk腳本,它打印在年底冗餘空行:

$ awk -F, 'BEGIN{ RS=":" } {print $2}' employee-one-line.txt 
John Doe 
Jason Smith 
Raj Reddy 
Anand Ram 
Jane Miller 

$ 

爲什麼會出現在尾部的空行?

+0

要調試輸出格式問題,這是一個放置在輸出字符是個好主意所以你可以看到來自哪裏。在這種情況下,將「{print $ 2}」更改爲「{print」<" $2 ">「},應該更清楚發生了什麼事情。 –

回答

3

由於您已將記錄分隔符設置爲冒號,因此最後一條記錄爲105,Jane Miller,後跟一個換行符。 print增加了一個ORS(輸出記錄分隔符)到它打印的東西的末尾,所以你最終得到兩個。

默認行爲是awk會將換行符作爲記錄分隔符,然後在您每次使用print時將其添加回來。

爲了使AWK吞下換行符在這種情況下,一個選擇是將其添加到您的域分隔符:

awk -F'[,\n]' 'BEGIN{ RS=":" } {print $2}' file 
0

一旦你定義了RS=':',換行符不再是一個記錄分隔符,所以終止你的文件的換行符被追加到「Jane Miller」中。

相關問題