2010-04-08 56 views
3

我试图使这个命令:如何使用一个变量在一个awk表达

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的字面意思是“$ {值}“ 在那里。下面是我的非工作的尝试:

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

回答

6

您可以使用AWK的-v选项变量传递从外壳

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

gsub()功能是代替你有什么与sed命令。所以只需一个awk命令就可以了。 sed在这种情况下是冗余的(以及其中大多数情况下使用awk)

+0

Thnx,只是使用awk -v values =“$ {values}”就像一个魅力! +1并接受你! – lugte098 2010-04-08 11:33:50

1

如果你的意思是values是一个shell变量,那么这将工作:

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

Thnx for the reply,+1! – lugte098 2010-04-08 11:35:15

+1

只有当您输出值或值= awk ...时才有效...... – 2010-04-08 14:43:00

+0

或者如果您编写values = ... awk'...''。但仍然是好点。 – 2010-04-08 22:16:52

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) 
+0

Thnx的回复,+1! – lugte098 2010-04-08 11:34:38

相关问题