行末の空白の削除
前任者が作ったプログラムを 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 (置き換え) ができないこともしばしば挙げられているようです。




