我正在尝试制作此命令:
sed bla bla filename | awk '{printf "%s %s_entry_%.3f %.3f %.3f %.3f",$1,$3,$4,$5,$6,$7}'
但问题是,我希望%.3f部分是可变的。因此,在一种情况下,它可能是%.3f,而在另一种情况下,它可能是%。3f%.3f%.3f。因此,为了清楚起见,我将在示例代码中使用静态代码。所以如果我想要这些%.3f中的4个并将它们放在变量$值中,如下所示:
values="%.3f %.3f %.3f %.3f"
然后我怎么能把这个字符串放在awk表达式中,而不是把awk简单地放在那里“$ {values}”。以下是我的非工作尝试:
sed bla bla filename | awk '{printf "%s %s_entry_${values}",$1,$3,$4,$5,$6,$7}'
答案 0 :(得分:7)
您可以使用awk的-v
选项从shell传递变量
#!/bin/bash
awk -v values="${values}" '{gsub("blah","replace");printf "%s %s_entry_"values ....}' file
gsub()
函数用于替换sed
命令所具有的功能。所以只需要一个awk命令。在这种情况下sed
是多余的(以及使用awk的大多数其他情况)
答案 1 :(得分:2)
最容易使用实际的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)
答案 2 :(得分:1)
如果您的意思是values
是一个shell变量,那么这将起作用:
sed bla bla filename | awk '{printf "%s %s_entry_"ENVIRON["values"],$1,$3,$4,$5,$6,$7}'