2016-04-15 11 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(出力レコードセパレータ)を追加するので、2つになります。

デフォルトの動作では、改行文字をレコード区切り文字として使用してから、printに変更すると元に戻されます。 awkの一つの選択肢は、あなたのフィールドセパレータにそれを追加することです、この場合には、改行を飲み込むようにするために

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

RS=':'を定義すると、改行はレコードセパレータではなくなり、ファイルを終了する改行が「Jane Miller」に追加されます。

関連する問題