2011-07-18 16 views
-1

可能性の重複:
UNIX shell script and escaping quotes for AWK scriptUNIX AWKエスケープ単一引用符

私はこれがちょうどUNIXおよびnawkのスクリプトの一部である(その内のブロックのnawkているUNIXスクリプトを持っています。 国と国のコード値を持つファイルから国ISOコードの参照値を読み取り、国に括弧があるときはいつでも問題に直面するこのブロックです名前() または単一apostrope「

これらは単なるサンプル値であり、それは、単一引用符と括弧

Sample values 

[email protected] D'IVOIRE 
[email protected], Democratic Republic of (was Zaire) 
[email protected] (local name: Hrvatska) 

との多くの国を持つことができますが、plsは文字列は単一引用符を持っているなら、私はこれらの2つの問題を克服することができますまたはparantheses。

は、私は、この単一引用符をエスケープし、動的apostropeできとにかくありますか?

コード

processbody() { 

nawk '{ 

      // These are sample values not exhaustive 
      COUNTRY_NAME = "COTE D'IVOIRE" // this is read dynamically inside nawk 
      #COUNTRY_NAME = "CONGO, Democratic Republic of (was Zaire)" // this is read dynamically inside nawk 
      #COUNTRY_NAME = "CROATIA (local name: Hrvatska)" // this is read dynamically inside nawk 
      if (COUNTRY_NAME != " "){ 

          file = "/tmp/country_codes.txt" 
          FS = "@" 
          while(getline < file) { 
          if($0 ~ COUNTRY_NAME) { 
          COUNTRY_CODE = $1 
          } 
          } 
          close(file) 



      } 

printf("%s\n",COUNTRY_CODE) > "/tmp/code.txt" 

    }' /tmp/file.txt 
    } 

    processbody 
+0

リンクの両方での私の質問は、シーケンスに動的な値のための単一引用符とparanthesisをエスケープする方法です内部awkと私はまだ答えを探していますplsのヘルプ – user549432

+0

country_codes.txtとfile.txtからのいくつかのサンプル入力を表示し、どの出力を見たいと思いますか?あなたのコードを構造化するより良い方法がなければならないので、入力ファイルのすべての一行に対して国コードファイルを読む必要はありません。 –

答えて

1

あなたが問題のカップルを持っています。一重引用符で囲まれた文字列(ノック体)内の単一引用符をハードコーディングし、文字列比較ではなく正規表現マッチングを行う~演算子を使用しているという事実をハードコーディングします。

あなたは「これはnawkの内部で動的に読み込まれる」とはどういう意味ですか?あなたの例では、値をハードコーディングしています。あなたはファイルからそれを読んでいますか?

単一引用符で囲まれた文字列内の単一引用符を取得するにはいくつかの方法があります:ヒアドキュメントを使うnawk '...x="what'"'"'s up" ...'

  • nawk '... x="what\'s up" ...'
  • シェル文字列contatenation:

      は、バックスラッシュを持つ単一引用符をエスケープ

    括弧問題について
    nawk_script=<<'END' 
    { 
        x="what's up" 
        ... 
    } 
    END 
    nawk "$nawk_script" /tmp/file.txt 
    

    、単に代わりに正規表現のマッチング演算子の文字列比較関数を使用します。

    if (index($0, COUNTRY_NAME) > 0) { 
        ... 
    } 
    
  • 関連する問題