在 AWK 表达式中使用 bash 变量

发布于 2024-10-09 02:27:14 字数 191 浏览 4 评论 0原文

我在 shell 脚本中尝试了以下代码片段,但 awk 没有找到 $REF

REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'

I tried the following snippet in a shell script but awk didn't find $REF

REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风追烟花雨 2024-10-16 02:27:14

不要在 shell 中引用游戏,而是使用 -v 选项将 shell 变量作为 awk 变量传递:

awk -v ref="$REF" 'match($0, ref) {print $2}'

如果 $REF 只是文本而不是正则表达式,请使用index() 函数而不是 match()

Instead of quoting games in the shell, use the -v option to pass the shell variable as an awk variable:

awk -v ref="$REF" 'match($0, ref) {print $2}'

If $REF is just text and not a regular expression, use the index() function instead of match().

俏︾媚 2024-10-16 02:27:14

你的问题措辞真的很糟糕......

无论如何,我认为你想要这个:

REF=SEARCH_TEXT
echo "some text" | awk "/$REF/{print \$2}"

注意$2和双引号的转义。

或者这个:

REF=SEARCH_TEXT
echo "some text" | awk "/$REF/"'{print $2}'

请注意明智地使用双引号和单引号,并且 $2 上没有转义。

您必须使用 shell 扩展,否则它将包含导出 shell 变量并从中使用它使用 awk 的环境 - 在这种情况下这是过度杀伤

export REF=SEARCH_TEXT
echo "some text" | awk '{if (match($0, ENVIRON["REF"])) print $2}'

我认为 awk 不支持 /.../ Guards 中的变量。 如果我错了,请纠正我。

You question is worded really poor...

Anyway, I think you want this:

REF=SEARCH_TEXT
echo "some text" | awk "/$REF/{print \$2}"

Note the escaping of $2 and the double quotes.

or this:

REF=SEARCH_TEXT
echo "some text" | awk "/$REF/"'{print $2}'

Note the judicious use of double and single quotes and no escaping on $2.

You have to use shell expansion, as otherwise it would encompass exporting a shell variable and using it from the environment with awk - which is overkill in this situation:

export REF=SEARCH_TEXT
echo "some text" | awk '{if (match($0, ENVIRON["REF"])) print $2}'

I think awk does not support variables in /.../ guards. Please correct me if I'm wrong.

三五鸿雁 2024-10-16 02:27:14

在 gawk 中,您有 ENVIRON 数组,例如 awk 'END{print ENVIRON["REF"]}' /dev/null 将打印如果您已将变量从 shell 导出到子进程,则该变量是您的变量。

In gawk, you have the ENVIRON array, e.g. awk 'END{print ENVIRON["REF"]}' /dev/null will print your variable if you've exported it out from the shell to sub-processes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文