• ベストアンサー

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

a-kumaの回答

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

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

noname#4643
質問者

お礼

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

関連するQ&A

  • awkについての質問

    実行環境:AIX5.2 シェル:Ksh 以下の2点をシェル内部で実行しているのですが、上手くいきません。 ご教授お願いいたします。 (1)System関数の実行結果(標準出力)をTERM上に表示させず、処理をしたい。 #!/usr/bin/ksh awk '{ system("ls -l") ###具体的にはls -l 結果の2行目、第一フィールドをawk内で変数に格納 }' (2)変数に格納された文字列のバイト数を取得し、変数に格納したい。 length()は文字数を取得できる事は理解したのですが、文字数ではなく、文字列のバイト数を取得したいです。awkに実装されている関数などありますでしょうか?

  • awk等で特定文字列の抜き出し

    次のような文字列から特定の文字を抽出したいです。 「xxx,yyyyy,zz」 で、yyyyの部分のみをコマンドラインから抽出したいのですがどのようにしたらよいでしょうか? ためしに自分で考えたコマンドは以下の通りです。 % echo "xxx,yyyyy,zz" | awk '{print substr($0, 1, index($0, ","))}' で行うと最初の「,」でなりxしか抽出できません。 すみませんが、いい方法がありましたら教えて下さい。

  • awkで¥をエスケープする方法

    awkで以下のように文字列置換したいのですが、変数strA内で¥マークを使用すると正常に置換してくれません。どのようにエスケープすれば良いのでしょうか? ================================================= --実行コマンド---------- gawk -f CNV.awk input.txt --input.txt---------------- いぬ¥ねこ --CNV.awk---------------- strA="ぬ¥ね"; strB="★"; gsub(strA, strB, $0); print $0; ================================================= このとき、「い★こ」という結果を期待しているのですが出力がありません。 また、 strA="ぬ¥¥ね"; や strA='ぬ¥ね'; と指定しても同様にダメでした。 どなたか解決策をご存知でしたらご教授宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • 文字列の一部を取り除きたい(awk?)

    こんにちわ。 下記の文字列操作を行いたいのですが上手くいきません。 どなたか教えて下さい。 環境OSはsolarisです。 awkにはこだわりません。 ・最初の2文字を取り除く ・最後の文字が"2"の場合取り除く 例 yoroshikune → roshikune onegai2 → egai

  • 日本語文字列の指定長(byte)切出し

    以下は日本語文字列(EUC)の指定長(byte)切出し関数なのですが、 これをShift-JIS版にするにはどうすれば良いのでしょうか? ================================================================ sub jcut { # 日本語文字列(EUC)の指定長(byte)切出し local($string, $length) = @_; if (substr($string,$length-1,1) =~ /[\x80-\xff]/) { $length++; } return substr($string, 0, $length); } ================================================================ 宜しくお願い致します。

  • 文字列から、特定の文字を削除したい

    アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか? 例えば電話番号の入力の場合、 03-xxxx-xxxx →03xxxxxxxx 077-xxx-xxxx →077xxxxxxx のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。 入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • [awk]マッチしたものをすべて取り出したい

    awk(GNU awk)を使って正規表現にマッチした部分文字列を最初にマッチしたものだけでなく、すべて取り出したいと思っています。 grepコマンドを使うと次のように簡単に取得できるのですが、awkだけで実現する場合どのように記述したらよいのでしょうか? ■例 $ echo 'abcdebx' | grep -o 'b.' 結果: bc bx # 最初にマッチしたものだけなら取得できる $ echo 'abcdebx' | awk 'match($0, /b./) {print substr($0, RSTART, RLENGTH)}' 結果: bc ■環境 GNU Awk 4.0.1 よろしくお願いします。

  • 特定文字列を含まない行を削除

    以前特定文字列を含む行を削除する方法の質問をし、正規表現を置換することでできることを知りました。^.*特定の文字列.*\n 今度は特定文字列を含まない行を削除を削除したいです。 この場合どう記述すればいいでしょうか? また、特定文字列1と特定文字列2のどちらかを含まない行を削除する方法もあわせて知りたいです。

  • awkで最後の列だけ除外する方法

    「awkのみ」で最後の列だけを区切り文字も含めて除外するのに、スマートな方法は無いでしょうか? x1,x2,x3,…,x98,x99,x100 を x1,x2,x3,…,x98,x99 とする方法です。 $ awk {$100="";print $0} だと最後のカンマが残りますし、かといってprint $1, $2,…$98, $99 はダサいのでやめたいのですが・・・

  • Excel2007 - 特定の文字列を一括で削除する方法を教えてください

    シート内に多数存在する文字列を一括で削除する方法はありますでしょうか。 検索と選択>置換で、置換後の文字列を空白にしても置換することができません。 関数を使用する方法しかないのでしょうか。 できれば関数を使用せずに削除したいと思っています。 ご存知の方がいらっしゃいましたらご教示頂けますでしょうか。 どうぞ宜しくお願い致します。