【问题标题】:using awk to assign a value to a variable doesn't work with cron使用 awk 为变量赋值不适用于 cron
【发布时间】:2012-04-11 12:29:30
【问题描述】:

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

有问题的行是这样的:

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

不想在细节上打扰你;它是 while 循环的主线,必须读取文件中列的值。它可以从命令行完美运行,但作为 cron 作业运行不会给变量“sens”提供任何值。

我已经检查了该行内的所有变量都可以读取(num、tipogalis 等),所以我很确定问题与“&&”的数量或“打印”函数有关.

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

LANG=en_US.UTF-8
export LANG

但没什么区别。

请问还有什么建议吗?我知道问题一定很小。魔鬼总是在细节中......

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    我假设您已经验证了当您在 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)
    

    【讨论】:

    • 感谢 Glenn,但这两个选项都没有做出任何改变。当从 cron 调用 AWK 语句时,也许我必须以不同的方式做一些事情?
    • @Rorro,cron 中的 awk 没有什么特别之处。这可能是你没有向我们展示的东西。由于从 cron 生成的作业环境非常小,您确定这可能不是您的 PATH 或您的脚本所依赖的其他环境变量的差异吗?
    【解决方案2】:

    最后正确的方法是这个:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2012-12-12
      • 2018-03-07
      • 2013-02-25
      • 2013-06-11
      • 2020-07-28
      • 2015-08-31
      相关资源
      最近更新 更多