lug*_*098 3 string bash awk printf
我正在尝试制作这个命令:
sed bla bla filename | awk '{printf "%s %s_entry_%.3f %.3f %.3f %.3f",$1,$3,$4,$5,$6,$7}'
Run Code Online (Sandbox Code Playgroud)
但问题是,我希望%.3f部分是可变的.所以在一个案例中它可能是%.3f而在另一个案例中它可能是%.3f%.3f%.3f.因此,为了清楚起见,我将在示例代码中使用静态代码.所以如果我想要这些%.3f中的4个并将它们放在变量$值中,如下所示:
values="%.3f %.3f %.3f %.3f"
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能把这个字符串放在awk表达式中,而不是让awk只是简单地将"$ {values}"放在那里.以下是我的非工作尝试:
sed bla bla filename | awk '{printf "%s %s_entry_${values}",$1,$3,$4,$5,$6,$7}'
Run Code Online (Sandbox Code Playgroud)
你可以使用-vawk选项从shell传入变量
#!/bin/bash
awk -v values="${values}" '{gsub("blah","replace");printf "%s %s_entry_"values ....}' file
Run Code Online (Sandbox Code Playgroud)
该gsub()函数是用该sed命令替换你拥有的东西.所以只需要一个awk命令.sed在这种情况下是多余的(以及使用awk的大多数其他情况)