2017-04-20 79 views
-1

嘗試從文件中獲取第一行的最後一個字。不知道爲什麼下面的命令:TCL(expect):無法讀取「NF」(來自awk):沒有這樣的變量

send "cat moo.txt | grep QUACK * | awk 'NF>1{print $NF}' meow.txt >> bark.txt "

越來越錯誤消息can't read "NF": no such variable

我可以在我的機器上運行awk 'NF>1{print $NF}' meow.txt >> bark.txt代碼片段。然而,當它運行在我的expect腳本中時,它給了我那個錯誤。

任何人都知道爲什麼期望不會識別awk內置變量?

回答

1

我認爲你的腳本試圖在通過send拍攝該命令之前,將變量$ NF擴大爲它的值。 $NF沒有設置在你的shell中,因爲它是awk的內部函數,它還沒有機會運行,所以它很慢。

嘗試逃脫變量,因此被視爲一個字符串字面量和awk將能夠使用它時,它的時間爲awk運行:

send "cat moo.txt | grep QUACK * | awk 'NF>1{print \$NF}' meow.txt >> bark.txt " 
+1

問題的根源在於內部單引號在這裏沒有特別的意義。這在shell中是一樣的:而'$ FOO'表示文字'$ FOO'(美元符號,F,O,O)。如果我們把它放在雙引號中:'「'$ FOO'」',單引號現在只是普通字符:這表示單引號,'FOO'變量的值,單引號。 – Kaz

+0

Tcl等價於單引號是'{'braces'}'。 –

相關問題