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

Bash 使用awk为变量赋值不适用于cron,bash,awk,Bash,Awk,从cron运行脚本时遇到问题。首先,我发现访问SQLite有困难;现在是AWK命令让我抓狂 问题在于: sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens` 不想用细节来打扰你;它是while循环的主线,必须读取文件中某列的值。它在命令行中工作得很好,但作为cron作业运行时,变量sen

从cron运行脚本时遇到问题。首先,我发现访问SQLite有困难;现在是AWK命令让我抓狂

问题在于:

sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens`
不想用细节来打扰你;它是while循环的主线,必须读取文件中某列的值。它在命令行中工作得很好,但作为cron作业运行时,变量sens没有任何价值

我已经检查过行中的所有变量都是read OK num、tipogalis等,所以我很确定问题与&&或print函数的数量有关

为了防止有人对环境变量提出建议,我已经在脚本的开头添加了以下几行:

LANG=en_US.UTF-8
export LANG
但没什么区别


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

我假设您在cron中运行时已经验证了num和tipogalis变量的值是否正确

我猜您在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)

最后,正确的方法是:

sens=awk-F,“{if$2=='${num}'&&&$4='$tipogalis'&&&$9='0'print$1}'/usr/xbow/xserve/galtel/relassen

但问题不在于线路。由于内部问题,我拨打了一个从未等于“0”的9美元的电话


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

谢谢Glenn,但这两个选项都没有任何改变。也许在从cron调用AWK语句时,我必须以不同的方式处理它?@Rorro,cron中的AWK没有什么特别之处。这可能是你没有给我们看的东西。由于从cron生成的作业的环境非常小,您确定脚本所依赖的路径或其他环境变量没有差异吗?