如何在 awk 表达式中使用变量

发布于 2024-08-28 11:17:35 字数 510 浏览 3 评论 0原文

我正在尝试执行此命令:

sed bla bla filename | awk '{printf "%s %s_entry_%.3f %.3f %.3f %.3f",$1,$3,$4,$5,$6,$7}'

但问题是,我希望 %.3f 部分是可变的。因此,在一种情况下,它可能是 %.3f,在另一种情况下,它可能是 %.3f %.3f %.3f。因此,为了清楚起见,我将在示例代码中使用静态代码。因此,如果我想要其中的 4 个 %.3f 并将它们放入变量 $values 中,如下所示:

values="%.3f %.3f %.3f %.3f"

那么如何将此字符串放入 awk 表达式中,而不使 awk 仅将“${values}”放在那里。以下是我的非工作尝试:

sed bla bla filename | awk '{printf "%s %s_entry_${values}",$1,$3,$4,$5,$6,$7}'

I'm trying to make this command:

sed bla bla filename | awk '{printf "%s %s_entry_%.3f %.3f %.3f %.3f",$1,$3,$4,$5,$6,$7}'

But the thing is, i want the %.3f part to be variable. So in one case it could be %.3f and in another it could be %.3f %.3f %.3f. So i'll just use a static one in my example code for clarity. So if i want 4 of these %.3f and put them in variable $values like so:

values="%.3f %.3f %.3f %.3f"

Then how can I put this string in the awk expression, without making awk to just put literally "${values}" in there. The following is my non-working-attempt:

sed bla bla filename | awk '{printf "%s %s_entry_${values}",$1,$3,$4,$5,$6,$7}'

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

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

发布评论

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

评论(3

☆獨立☆ 2024-09-04 11:17:35

您可以使用 awk 的 -v 选项从 shell 传入变量,

#!/bin/bash    
awk -v values="${values}" '{gsub("blah","replace");printf "%s %s_entry_"values ....}' file

gsub() 函数将用 sed 替换您所拥有的内容命令。所以只需一个 awk 命令就可以了。在这种情况下,sed 是多余的(以及使用 awk 的大多数其他情况)

you can use -v option of awk to pass in variable from the shell

#!/bin/bash    
awk -v values="${values}" '{gsub("blah","replace");printf "%s %s_entry_"values ....}' file

the gsub() function is to replace what you have with that sed command. So just one awk command will do. sed is redundant in this case (and most other cases where awk is used)

情深缘浅 2024-09-04 11:17:35

最容易使用实际的 awk 变量:

sed bla bla filename | awk -v values="$values" '{printf "%s %s_entry_"values,$1,$3,$4,$5,$6,$7}'

或者使用 bash:

awk -v values="$values" '{printf "%s %s_entry_"values,$1,$3,$4,$5,$6,$7}' <(sed bla bla filename)

Easiest to use actual awk variables:

sed bla bla filename | awk -v values="$values" '{printf "%s %s_entry_"values,$1,$3,$4,$5,$6,$7}'

Or with bash:

awk -v values="$values" '{printf "%s %s_entry_"values,$1,$3,$4,$5,$6,$7}' <(sed bla bla filename)
冷心人i 2024-09-04 11:17:35

如果您的意思是 values 是一个 shell 变量,那么这将起作用:

sed bla bla filename | awk '{printf "%s %s_entry_"ENVIRON["values"],$1,$3,$4,$5,$6,$7}'

If you mean that values is a shell variable, then this will work:

sed bla bla filename | awk '{printf "%s %s_entry_"ENVIRON["values"],$1,$3,$4,$5,$6,$7}'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文