相关疑难解决方法(0)

将 shell 变量作为 /pattern/ 传递给 awk

在我的 shell 函数之一中具有以下内容:

function _process () {
  awk -v l="$line" '
  BEGIN {p=0}
  /'"$1"'/ {p=1}
  END{ if(p) print l >> "outfile.txt" }
  '
}
Run Code Online (Sandbox Code Playgroud)

,所以当被称为 as 时_process $arg$arg会被传递为$1,并用作搜索模式。它是这样工作的,因为 shell 扩展$1代替了 awk 模式!也l可以在 awk 程序中使用,用-v l="$line". 一切都很好。

是否可以以相同的方式将模式作为变量进行搜索?

以下将不起作用,

awk -v l="$line" -v search="$pattern" '
  BEGIN {p=0}
  /search/ {p=1}
  END{ if(p) print l >> "outfile.txt" }
  '
Run Code Online (Sandbox Code Playgroud)

, 因为 awk 不会解释/search/为变量,而是按字面意思解释。

shell awk quoting variable

71
推荐指数
3
解决办法
11万
查看次数

标签 统计

awk ×1

quoting ×1

shell ×1

variable ×1