- ベストアンサー
awk で右端の文字を1文字削除したい
awkで、文字列の最後に特定の文字があったときにそれを削除するというものを作ろうと思います。 最後の文字が何であるかを調べるには、lengthで文字列の長さを調べてから、substrを使えば調べられると思うのですが、その文字を削除する方法がわかりません。文字列のx文字目までを取得する、あるいは、x文字目の文字を置換する(この場合ヌルに)という操作ができれば良いと思うのですが、それらしい文字列関数が無いように思います。どのような操作をするべきなのでしょうか? 環境は、Windows98でgawk32を使っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字列の最後だけをターゲットにするのであれば、長さなんて知らなくても 正規表現でOKです。 例えば、文字列 s の末尾が英小文字だったら削除する、だったら if ( s ~ /[a-z]$/ ) { sub( /.$/, "", s ); } という感じ。 ちょっと正規表現が見にくいでしょうか? sub() の行だけを全角文字で書くと sub( /.$/, ””, s ); です。
その他の回答 (1)
- shuyamakawa
- ベストアンサー率67% (111/164)
もっと良い方法があるかもしれませんが(awk最近あまり使ってないので...) substrを使うのはどうでしょうか? BEGIN { str = "abcdef" print "before:" str str = substr( str, 0, length( str ) - 1 ) print "after :" str }
お礼
なるほど、substrでもこうやれば可能ですね。substr自体は知っていたのですが、この使い方に思い至りませんでした。有り難うございます。
お礼
なるほど。正規表現ってはこうやって使うんですね。今まで、検索の時に便利になる程度のものと思っていましたが、なかなか強力な使い方できることがわかりました。ありがとうございます。