在猪脚本中执行shell命令时出错

问题描述:

我有一个猪脚本,在开始时我想从某个日期(后来用于检索那些日子的日志文件)过去7天内生成一个日期字符串。 我尝试与这条线做到这一点: %声明CMD7 input= ; for i in {1..6}; do d=$(date -d "$DATE -i days" "+%Y-%m-%d"); input="\$input\$d,"; done; echo \$input在猪脚本中执行shell命令时出错

我得到一个错误: “ERROR 2999:意外内部错误错误执行的外壳命令:输入=;对于i在{1..6}。 ; do d = $(date -d“2012-07-10 -i days”“+%Y-%m-%d”); input =“$ input $ d”,done ;.退出代码127“
但是shell命令在猪以外运行得非常好。我真的不确定这里发生了什么问题。

谢谢!

我已经有了一个可行的解决方案,但并不像您想要的那样精简,基本上我没有设法让Pig在声明中执行复杂的shell语句。

我第一次写一个shell脚本(我们称之为6-days-back-from.sh):

#!/bin/bash 
DATE=$1 
for i in {1..6}; do d=$(date -d "$DATE -$i days" +%F) ; echo -n "$d "; done 

然后猪脚本如下(我们称之为days.pig):

%declare my_date `./6-days-back-from.sh $DATE` 
A = LOAD 'dual' USING PigStorage(); 
B = FOREACH A GENERATE '$my_date'; 
DUMP B 

注意是包含文本的单行文本文件的目录,用于显示的目的,我们的变量

我叫脚本遵循:

pig -x local -param DATE="2012-08-03" days.pig 

,并得到了以下的输出:

({(2012-08-02),(2012-08-01),(2012-07-31),(2012-07-30),(2012-07-29),(2012-07-28)})