プロが教えるわが家の防犯対策術!

AWKのスクリプトは、文字コードによってエラーが起きるものでしょうか。

あるスクリプトを実行すると、エラーが表示されるのですが、そのスクリプトの文字列部分を少し書き換えると、エラーが出なくなったりします。

構文自体は変えておらず、例えば、指定した文字列「あいうえお」を、「あいxうえお」の様に書き換えただけです。

また、改行を追加しただけでもエラーが出なくなったりします。

エラーメッセージは以下の様なものです。

----------------------------

awk: C:\xxx.txt:5: fatal: Unmatched ( or \(: 文字列

----------------------------

構文は、以下の様なものを複数回実行しています。
文字列や数値は行によって異なります。

----------------------------

{A=$0;if(sub(/^.*あああ/,B,A) && sub(/いいい.*$/,B,A) && A>0 && A<=1000)print}

----------------------------

スクリプトファイルの文字コードを色々変更してみたのですが、やはりエラーになってしまいます。

Perlでは文字コードを指定する記述方法がありますが、AWKでも同じ様なものがあるのでしょうか。

質問者からの補足コメント

  • お教え頂いた方法を試してみたのですが、どうしてもうまく行きません。

    実際にエラーが出る状況の詳細は以下の通りです。
    http://panda.ehoh.net/article/awk/

    文字コードも色々変更してみたのですが、うまく行きません。

    せっかくお教え頂いたのに申し訳ありません。
    もう少し考えてみようと思います。

    ご回答、本当にありがとうございました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/08/07 13:51
  • Linux(Knoppix)でAWKを使い、当該スクリプトを実行してみましたら、正しい結果が出力されました。

    又、「jgawk」という漢字対応のAWKを見付けたので、これを使ってみましたら、正しく結果が出力されました。

    しかし、実用するスクリプトは数千行あり、これをjgawkで実行しましたら、以下の様なエラーが発生しました。

    jgawk: script.txt:70: fatal: make_regexp: rp->pat.fastmap: can't allocate memory
    (Error 0)

    Knoppix上で実行したAWKでは、この数千行あるスクリプトを実行しても、エラーも出ず、正常に結果が出力されました。

    もう少し調べてみて、無理そうなら諦めようと思います。
    ご回答、本当にありがとうございました。

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/08/09 13:06
  • 今回は諦めようと思います。ご回答、本当にありがとうございました。勉強になりました。

      補足日時:2015/08/11 14:40

A 回答 (3件)

サイトを見た限り、エラーになるのはおかしいと思います。


手元の「Shift_JISを扱えないawk」で試してもそういうエラーにはなりません。

別のawk(私が紹介したやつとか)に切り替えた方が良いかと思います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お手元のShift_JISを扱えないawkで試してもエラーは出ないとの事で、参考になりました。ありがとうございます。

当方の環境がおかしいのかも知れないので、一度Linuxをインストールして、Linux上で試してみようと思います。

ご紹介頂いたファイルも全て試したのですが、残念ながらうまく行きませんでした。
(awk.exe、gawk.exe、gawk-3.1.6.exe、pgawk.exe、pgawk-3.1.6.exe)

ですので、文字コード以外の可能性も考えて行こうと思います。

まずは、Linuxをインストールしてみます。
ご回答、本当にありがとうございました。

お礼日時:2015/08/09 10:55

Windowsですよね。


シフトJISに対応していないawkで、スクリプト中にシフトJISの文字を使うと不具合が起きる可能性があります。
文字コードは、euc-jpかutf-8を使ってください。

ただ、質問に書かれた通りのスクリプトでエラーが出たとするとその原因ではないか。
本当に質問文中のスクリプトでエラーが出ますか?「あ」や「い」では不具合は起きないはずなのですが。
また、文字コードをeuc-jpやutf-8に変更して同じエラーが出るとも考えにくいです。

なお、マルチバイトに対応したawkであれば、http://gnuwin32.sourceforge.net/packages/gawk.htm
set LANG=ja_JP.Shift_JIS
set LANG=ja_JP.utf-8
set LANG=ja_JP.euc-jp
などで可能です。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

おっしゃる通り、環境はWindowsです。

シフトJISが原因なのですね。ありがとうございます。参考になりました。

すみません。質問に書かせて頂いたスクリプトは、実際にエラーが起きたコードではありません。

自分の作業用のスクリプトで今回のエラーが起きたので、エラーが出る最小限まで簡略化したコードを載せようと思ったのですが、どうしても長くなってしまい、その上、個人情報とまでは行きませんが、作業の内容に関する部分がどうしても削れなかったので、今回の内容を載せさせて頂きました。

ですので、「あ」や「い」では不具合は起きないというのは、おっしゃる通りだと思います。実際は違う文字を使っています。

文字コードを変更してもエラーが出たというのは本当です。

今現在、確認作業が出来ない環境にいるので、明日にでも再度確認してみようと思います。

gawkとsetの件も、大変参考になりました。ありがとうございます。明日試してみます。

ご回答、本当にありがとうございました。

お礼日時:2015/08/06 22:51

素の AWK に「文字コード」なんてもんはないような気がする.

    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

そうなのですね。自分はいつもワンライナーでAWKを使う程度で、スクリプトを書いたりする深い知識はないので、参考になりました。

そもそも「文字コード」という概念がAWKには無いのですね。WEB検索しても解決する文献がヒットしなかったので不思議に思っていました。

ご回答、本当にありがとうございました。

お礼日時:2015/08/06 16:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています