文字列の最初と最後にあるスペースとタブを削除
codeなにがし::phpでの空白削除を見て、以前AWK Users JP :: 行末の空白の削除というものを書きましたが、特に関数化していなかったので、trim() 関数を作成してみました。 ただし、ここで作成する trim() 関数は awk 以外の言語でしばしば実装されている trim() 関数と同じ挙動を示すかどうかは一切考慮していません。
awk での最初と最後にあるスペースとタブの削除は sub() 関数を用いますが、sub() 関数と gsub() 関数は共に元の文字列 (第 3 引数) を破壊してしまいます。 したがって、ここでは一旦別の変数 tmp_str に移してから、これに対して sub() 関数を適用します。 具体的なコードは以下のとおりです。
#! /usr/local/bin/nawk -f
# trim.awk
# 文字列の最初と最後にあるスペースとタブを削除します。
# usage: nawk -f trim.awk foo.txt
{
print trim($0);
}
# trim(): 文字列の最初と最後にあるスペースとタブを削除した文字列を返す
# in: 文字列
# out: 最初と最後にあるスペースとタブを削除した文字列
function trim(str, tmp_str) {
tmp_str = str; # 一旦別変数に格納しないと破壊される
sub(/^[ \t]+/, "", tmp_str); # 行頭のスペースとタブの削除
sub(/[ \t]+$/, "", tmp_str); # 行末のスペースとタブの削除
return tmp_str;
}
実行してみることにします。
$ echo "\t test \t " | od --format=a 0000000 ht sp t e s t sp ht sp nl 0000012 $ echo "\t test \t " | nawk -f trim.awk | od --format=a 0000000 t e s t nl 0000005
od コマンドの結果を用いると明らかにタブ (ht) とスペース (sp) が削除されていることが分かります。




