我正在尝试执行此命令:
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}'
最佳答案
你可以使用awk的-v
选项从shell中传入变量
#!/bin/bash
awk -v values="${values}" '{gsub("blah","replace");printf "%s %s_entry_"values ....}' file
gsub()
功能是用 sed
命令替换您拥有的内容。所以只需要一个 awk 命令就可以了。 sed
在这种情况下是多余的(以及大多数其他使用 awk 的情况)
关于string - 如何在 awk 表达式中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2599051/