行末の空白の削除

前任者が作ったプログラムを vim や Emacs で行末のスペースやタブなどを表示させてみると、行末のスペースが残っていることが時々あります。 よほどでなければ行末のスペースやタブが悪さをすることはないのですが、やはり気になります。

行末の空白を自動で削除では Python を使って書かれていますが、もちろんこれは awk の得意とする部分です。

ここでは例として以下のようなテキストファイルを用意しました。

# cat delete_last_space.txt
test
  test
test  
  test  
	test
	test	
    
	

test

多分、見ても分かりませんね。 可視化しておくと以下のようになります。

$ gawk '{gsub(/\t/,"[TAB]");gsub(/ /,"[SPC]")}1' delete_last_space.txt
test
[SPC][SPC]test
test[SPC][SPC]
[SPC][SPC]test[SPC][SPC]
[TAB]test
[TAB]test[TAB]
[SPC][SPC][SPC][SPC]
[TAB]

test

実際に行末のスペースやタブを削除するには awk では以下のようにします。

$ gawk '{sub(/[ \t]+$/,"")}1' delete_last_space.txt > test.txt

最後の 1 は {print $0} の省略になりますが、awk で一行野郎を使うときには非常に効果的な記述方法です。 もっとも、人によっては 4 とか他の文字と間違えにくいものにする人もいます。

sed と比較して、awk の欠点として挙げられるのが速度ですが、あと、in-place (置き換え) ができないこともしばしば挙げられているようです。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png