Tcsh
在 shell 腳本中使用 awk 和變數
我有一個名為“random”的文件,如下所示:
A B C D A B C D A B C D
如何讓這個 shell 腳本列印第二列?
#! /usr/bin/tcsh -f set variable = "2" awk '{print "$""'"$variable"'" }' random
它給:
$2 $2 $2 $2 $2
如果我像這樣對 $2 進行硬編碼:
#! /usr/bin/tcsh -f awk '{print $2 }' random
我明白了
B B B
但是我每次都需要設置不同的值,所以硬編碼不是一種選擇
使用 awk 的
-v
選項將變數傳遞給 awk。例如,將 awk 變數設置n
為與 csh 變數相同的值$variable
:% set variable=2 % awk -v n="$variable" '{print $n}' random B B B
或者,在腳本之後將變數賦值作為參數傳遞(awk 會將參數解釋
x=y
為賦值,而不是文件名):% set variable=4 % awk '{print $n}' n="$variable" random D D D
在這兩種情況下,awk 腳本都將解釋
$n
為“編號為 n 的欄位”或者,您可以使用環境變數。awk 可以通過
ENVIRON
數組訪問它們。例如% setenv variable 2 % awk '{print $ENVIRON["variable"]}' random B B B
順便說一句,正如其他人在評論中提到的那樣,
csh
/tcsh
不是腳本語言的好選擇 - 使用類似 bourne 的 shell 來編寫 shell 腳本。tcsh
對於互動式 shell 來說仍然是不錯的,但沒有提供其他 shell 尚未提供的任何東西 - csh 在 1980 年代是一個優秀的互動式 shell,但其他 shell 早已超越它(而 csh 有缺點與良好的腳本外殼語言不同,因此您不會僅通過互動式使用腳本來獲得腳本經驗)。嘗試改用 bash、ksh 或 zsh。