2012-04-07 45 views
2

這裏是我的awk語句的一個片段..我試圖在語句中插入這兩個變量,但他們沒有得到評估。有人能指引我朝着正確的方向嗎?在我的awk語句中插入變量

ZONE=`date "+%Z %Y"` 
DAY=`date "+%a"` 

awk '{if (NR<2) {print "["$1, $2, $3"]"}}' 

我想這一點:

awk '{if (NR<2) {print "[" $DAY, $1, $2, $3, $ZONE "]"}}' 

這個技巧在這裏幫助解決我的問題。

通過用「'」(即雙引號 - 單引號 - 雙引號)括住它們來保護awk的shell變量。在那裏他們在單引號

的awk '{打印 「 ' 」$ VAR1「'」, 「 ' 」$ VAR2「'」}' INPUT_FILE

+0

你想去哪裏他們插入?你究竟做了什麼? – Mat 2012-04-07 13:41:50

+0

awk'{if(NR <2){print'[「$ DAY,$ 1,$ 2,$ 3,$ ZONE」]「}}' – Jim 2012-04-07 14:08:12

+0

不要在註釋中張貼代碼,編輯您的問題以添加詳細信息。 (這次是爲你做的。) – Mat 2012-04-07 14:11:06

回答

11

您可以使用-v選項:

ZONE=`date "+%Z %Y"` 
DAY=`date "+%a"` 
awk -vzone="$ZONE" -vday="$DAY" 'BEGIN { print zone, day }' 
+1

這通常也使得awk腳本本身比依靠在腳本中擴展的shell變量更清潔。另外,如果awk腳本作爲單獨的文件提供(awk -f scripfile.awk),這也可以工作。 – 2012-04-07 15:36:19

0

這些變量不會被擴大。考慮在你的awk表達式中使用雙引號作爲你的最外層引號並且避免使用雙引號。

雖然我在這裏只是猜測,因爲您似乎沒有包含您在變量嵌入但未被評估的地方使用的實際命令。

未來,或者如果這個答案沒有幫助,請考慮包括您使用的命令,輸出以及您預期發生的情況。這樣,弄清楚你的意思就容易多了。