使用awk为变量赋值不适用于cron

时间:2012-04-11 12:29:30

标签: bash awk

从cron运行脚本时遇到问题。首先我发现访问SQLite有困难;现在它的AWK命令让我发疯了。

有问题的一行是:

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

不想打扰你的细节;它是while循环的主线,必须读取文件中列的值。它在命令行中运行良好,但作为cron作业运行不会给变量“sens”带来任何价值。

我已经检查过行内的所有变量都是OK(num,tipogalis等),所以我很确定这个问题与“&&”的数量有关。或者使用“打印”功能。

如果有人想提出有关环境变量的建议,我已经在剧本的开头添加了以下几行:

LANG=en_US.UTF-8
export LANG

但没有任何区别。

还有其他建议吗?我知道这个问题一定很小。魔鬼总是在细节......

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

最后,正确的方法是这个:

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

但问题不在于此。我的电话是9美元,由于内部问题而永远不会等于'0'。

对不起这篇文章甚至可以完全删除,以免混淆其他用户。