【问题标题】:How to use awk variable inside double quotes?如何在双引号内使用 awk 变量?
【发布时间】:2018-05-23 06:57:06
【问题描述】:

我定义了以下 shell 变量:

memory_params="some memmory params"
class_path="some class path"
class_name="some class name"

现在,我在 awk 中使用这些 bash 变量

awk -v var1="${memory_params}" \
    -v var2="${class_path}" \
    -v var3="${class_name}" \
  '{ 
     cmd="java var1 -cp var2 var3";
     system(cmd);  
   }'

但是,这不采用var1var2var3 的值,原因很明显。如何在双引号内使用 awk 变量?

【问题讨论】:

  • echo aaa | awk -v var="${memory_params}" '{print var}' 打印 $memory_params 的内容。尝试逐步测试您的解决方案以捕获错误
  • @m47730 这工作正常。问题是访问双引号内的var,就像问题中提到的java命令一样。
  • 您的问题可以替换为:“使用 awk,如何使用常量部分和变量构建字符串。这个问题与 Bash 完全无关。
  • 你为什么要首先这样做awk

标签: awk


【解决方案1】:

尝试关注一次,如果这有帮助,请告诉我。直接在system 命令中使用变量,而不是创建变量并将其传递给system

awk -v var1="${memory_params}" \
    -v var2="${class_path}" \
    -v var3="${class_name}" \
  BEGIN'{ 
     system("java " var1 " -cp " var2 OFS var3);  
   }'

删除 BEGIN 以防您有任何要读取的 Input_file

【讨论】:

  • 如何破解?您认为哪种方法更优雅
  • @JamesBrown 很抱歉称其为 hack。删除了评论。我只是好奇是否可以在双引号内使用 awk 变量。
  • 我不明白这怎么可能。通过正确的引用,您可以在 awk 脚本中使用 bash 变量,但这会导致大量的引号转义、不可读的代码并且具有潜在危险。 foo=bar; awk "BEGIN{print \"foo is $foo\"}" 也谈不上优雅。
【解决方案2】:

我也遇到过同样的情况,下面我使用的命令解决了我的问题。

database_impala=test_db awk -v var="${database_impala}" '{ print var"."$0}'

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2015-07-31
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多