2011-07-18 119 views
-1

可能重複:
UNIX shell script and escaping quotes for AWK scriptUNIX AWK逃逸單引號

我有了NAWK裏面阻止UNIX腳本(這只是UNIX和NAWK腳本的一部分。它有更多的邏輯,下面的代碼肯定應該是nawk) 這個塊從國家和國家代碼值的文件中讀取國家ISO代碼的查找值,並且每當國內有支架時我都會遇到問題名稱() 或單個apostrope'

這些只是樣本值,它可以有許多國家的單引號和括號

Sample values 

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

你能請幫助我克服一個字符串有一個單引號的這2個問題或者派生物。

有反正我可以逃避這個單引號和動態?

代碼

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中,我仍然在尋找答案請幫助 – user549432

+0

請向我們展示一些來自country_codes.txt和file.txt的示例輸入以及您希望看到的輸出。必須有更好的方法來構建代碼,因此您不必爲輸入文件的每一行讀取國家/地區代碼文件。 –

回答

1

你有一對夫婦的問題。在單引號字符串(nawk主體)內對單引號進行硬編碼,以及您使用執行正則表達式匹配的~運算符,而不是字符串比較。

你是什麼意思「這是在nawk內動態讀取」?在你的例子中,你正在對價值進行硬編碼。你是否從文件中讀取它?

有一對夫婦的方式來獲得一個單引號字符內一個單引號:

  1. 逃避用反斜槓的單引號:nawk '... x="what\'s up" ...'
  2. 貝殼串contatenation:nawk '...x="what'"'"'s up" ...'
  3. 使用定界符:

nawk_script=<<'END' 
{ 
    x="what's up" 
    ... 
} 
END 
nawk "$nawk_script" /tmp/file.txt 

關於括號的問題,簡單地使用,而不是一個正則表達式匹配操作字符串比較函數:

if (index($0, COUNTRY_NAME) > 0) { 
    ... 
}