11

RedHat Linux で簡単な awk を書いていますが、スイッチ/ケースが機能しないことがわかりました。Webで検索しましたが、解決策が見つかりませんでした。以下は私のコードです:

 BEGIN {
   foo = 1;
     switch (foo) {
         case 3:
         print "x";
         break;
         case 2:
         print "y" ;
         break;
         case 1:
         print "z" ;
         break;
         default:
         print "default" ;
      }
 }

私が実行している awk は GNU Awk 3.1.5 です。次のエラーが発生しました。

awk -f test.awk

awk: test.awk:3:      switch (foo) {
awk: test.awk:3:                   ^ syntax error
awk: test.awk:5:          case 3:
awk: test.awk:5:                ^ syntax error
awk: test.awk:8:          case 2:
awk: test.awk:8:                ^ syntax error
awk: test.awk:11:          case 1:
awk: test.awk:11:                ^ syntax error
awk: test.awk:14:          default:
awk: test.awk:14:                 ^ syntax error

誰でも私を助けてもらえますか?ありがとう!

4

1 に答える 1

13

GAWK のマニュアルには次のように書かれています。

6.4.5 switch ステートメント

注: このサブセクションでは、gawk 3.1.3 で追加された実験的な機能について説明します。デフォルトでは有効になっていません。これを有効にするには、「--enable-switch」オプションを使用して、gawk が構成およびビルドされているときに構成します。詳細については、Section B.2.2 [Additional Configuration Options], page 269 を参照してください。

switch ステートメントを使用すると、大文字と小文字の一致に基づいて式を評価し、ステートメントを実行できます。Case ステートメントは、定義されている順序で一致するかどうかがチェックされます。適切なケースが見つからない場合、デフォルトのセクションが提供されていれば実行されます。

のどのバージョンgawkを使用していますか? オプションでコンパイルされました--enable-switchか?

gawkでコンパイルされたかどうかがわからず--enable-switch、構文エラーが発生している場合は、そうではないと推測するのが妥当です。私はgawk 3.1.8デフォルトの構成でコンパイルされたものを使用しており、スクリプトで表示されているエラーをほぼ正確に取得しています。そのため、お使いのバージョンが必要な構成オプションでコンパイルされている可能性はほとんどありません。gawk必要に応じて、オプションを使用して再コンパイルすることは難しくありません。

于 2012-07-09T19:44:50.377 に答える