2010-04-08 52 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

相關問題