• ベストアンサー

awk で右端の文字を1文字削除したい

awkで、文字列の最後に特定の文字があったときにそれを削除するというものを作ろうと思います。 最後の文字が何であるかを調べるには、lengthで文字列の長さを調べてから、substrを使えば調べられると思うのですが、その文字を削除する方法がわかりません。文字列のx文字目までを取得する、あるいは、x文字目の文字を置換する(この場合ヌルに)という操作ができれば良いと思うのですが、それらしい文字列関数が無いように思います。どのような操作をするべきなのでしょうか? 環境は、Windows98でgawk32を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

文字列の最後だけをターゲットにするのであれば、長さなんて知らなくても 正規表現でOKです。 例えば、文字列 s の末尾が英小文字だったら削除する、だったら if ( s ~ /[a-z]$/ ) {  sub( /.$/, "", s ); } という感じ。 ちょっと正規表現が見にくいでしょうか? sub() の行だけを全角文字で書くと sub( /.$/, ””, s ); です。

noname#4643
質問者

お礼

なるほど。正規表現ってはこうやって使うんですね。今まで、検索の時に便利になる程度のものと思っていましたが、なかなか強力な使い方できることがわかりました。ありがとうございます。

その他の回答 (1)

回答No.1

もっと良い方法があるかもしれませんが(awk最近あまり使ってないので...) substrを使うのはどうでしょうか? BEGIN { str = "abcdef" print "before:" str str = substr( str, 0, length( str ) - 1 ) print "after :" str }

noname#4643
質問者

お礼

なるほど、substrでもこうやれば可能ですね。substr自体は知っていたのですが、この使い方に思い至りませんでした。有り難うございます。

関連するQ&A