2012-04-11 87 views
0

從cron運行腳本時遇到問題。首先,我發現訪問SQLite有困難;現在是AWK命令讓我瘋狂。使用awk爲變量賦值並不適用於cron

問題的行是這樣的:

sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens` 

不想用細節來打擾你;它是while循環的主線,它必須讀取文件中的列值。它可以從命令行完美工作,但作爲cron作業運行不會給變量「sens」帶來任何價值。

我已經檢查出行內的所有變量都是OK(num,tipogalis等),所以我很確定這個問題與「& &」的數量有關,或者與「print 「功能。

以防萬一有人想提出有關環境瓦爾東西,我已經添加了以下線在腳本的beggining:

LANG=en_US.UTF-8 
export LANG 

但並沒有區別。

有其他建議嗎?我知道這個問題一定很小。魔鬼總是在細節...

回答

0

我假設你已經驗證,當你在cron中運行時,numtipogalis變量保持正確的值。

我猜你缺少awk if語句中常量的引號。

sens=`awk -F, '{ if($2 == "'${num}'" && $4 == "'$tipogalis'" && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens` 

我會使用-v選項的值傳遞到awk的,而不是拼湊引用的。

sens=$(awk -F, -v val2="$num" -v val4="$tipogalis" '$2 == val2 && $4 == val4 && $9 == "0" {print $1}' /usr/xbow/xserve/galtel/relasens) 
+0

感謝Glenn,但是這兩個選項都沒有做任何改變。也許有一件事我不得不以不同的方式用AWK語句從cron調用它來做? – Rorro 2012-04-11 15:50:26

+0

@Rorro,在cron中沒有什麼特別的awk。這可能是你沒有向我們展示的東西。由於cron產生的工作環境非常少,您確定它不是您的腳本所依賴的PATH或其他環境變量的差異嗎? – 2012-04-11 15:53:12

0

最終正確的方法是這樣:

SENS = awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == '0')print $1 }' /usr/xbow/xserve/galtel/relasens

但問題是不是就行了。由於內部問題,我的電話是9美元,從不等於'0'。

對不起。這篇文章甚至可以完全刪除,以免混淆其他用戶。