-1

可能重复:
UNIX shell 脚本和 AWK 脚本的转义引号

我有一个 UNIX 脚本,里面有 nawk 块(这只是 UNIX 和 NAWK 脚本的一部分。它有更多的逻辑,下面的代码肯定应该在 nawk 中)这个块读取国家 ISO 代码的查找值从具有国家和国家代码值的文件中,只要国家名称 () 中有括号或单个撇号',我就会遇到问题

这些只是示例值,它可以有许多带有单引号和括号的国家/地区

Sample values

CIV@COTE D'IVOIRE
COD@CONGO, Democratic Republic of (was Zaire)
HRV@CROATIA (local name: Hrvatska) 

你能帮我克服这两个问题,即字符串是否有单引号或括号。

无论如何我可以动态地转义这个单引号和撇号吗?

代码

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
4

1 回答 1

1

你有几个问题。在单引号字符串(nawk 正文)中硬编码单引号,并且您使用的~是执行正则表达式匹配的运算符,而不是字符串比较。

“这是在 nawk 中动态读取的”是什么意思?在您的示例中,您正在对值进行硬编码。您是从文件中读取它吗?

有几种方法可以在单引号字符串中获取单引号:

  1. 用反斜杠转义单引号:nawk '... x="what\'s up" ...'
  2. 外壳字符串连接:nawk '...x="what'"'"'s up" ...'
  3. 使用heredoc:

.

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

关于括号问题,只需使用字符串比较函数而不是正则表达式匹配运算符:

if (index($0, COUNTRY_NAME) > 0) {
  ...
}
于 2011-07-19T12:06:48.490 回答