Parameter
如何將變數值傳遞給腳本並在一行中執行它?
我有一個文件(temp_4n.in),其中包含以下幾行:
5 C 172.0696 5 C 135.6942 5 H 30.9062 5 H 31.8124 12 H 31.0377 12 O 293.0612 12 H 32.4678
我有一個腳本(testsc.txt),它將提取以某個數字開頭的行的最後一個 H,我會定期更改:
grep $'^${mold}\tH' temp_4n.in | tail -1 > temp_5n.in
但是,當我使用以下命令執行腳本(例如,想要以 12 開頭的行)時,它會失敗:
qsub -v mold=12 ./testsc.txt
我認為這與 grep 命令中的第一個 ‘$’ 被視為參數並被錯誤地替換有關。誰能幫我找出問題所在?
qsub -v varname=value
設置varname
為value
送出的作業環境中提供的。在您送出的腳本中,您在
grep
命令中使用此值,但包含該變數的字元串用單引號引起來,以防止 shell 擴展它。您的腳本應該改為使用
grep "^$mold[[:blank:]]H" temp_4n.in | tail -1 > temp_5n.in
$
您的程式碼中的首字母($'...'
) 在這裡不需要,而是我們[[:blank:]]
用來匹配空格或製表符。另一種方法是
awk
在您的腳本中使用:awk -v mold="$mold" '$1 == mold && $2 == "H" { this = $0 } END { print this }' temp_4n.in >temp_5n.in
這使用字元串比較(不是正則表達式)來測試第一列和第二列,當找到匹配行時,整行保存在變數中
this
。最後,this
列印最後一個值。這取代了grep
和tail
。