OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.114443
  • 閲覧数5029
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

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

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

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

文字列の最後だけをターゲットにするのであれば、長さなんて知らなくても
正規表現でOKです。

例えば、文字列 s の末尾が英小文字だったら削除する、だったら

if ( s ~ /[a-z]$/ ) {
 sub( /.$/, "", s );
}

という感じ。

ちょっと正規表現が見にくいでしょうか?
sub() の行だけを全角文字で書くと

sub( /.$/, ””, s );

です。
お礼コメント
noname#4643

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

その他の回答 (全1件)

  • 回答No.1
レベル10

ベストアンサー率 66% (103/155)

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

print "before:" str
str = substr( str, 0, length( str ) - 1 )
print "after :" str
}
お礼コメント
noname#4643

なるほど、substrでもこうやれば可能ですね。substr自体は知っていたのですが、この使い方に思い至りませんでした。有り難うございます。
投稿日時 - 2001-08-07 20:25:00


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ