2012-07-20 4 views
4

돼지 스크립트는 처음에는 특정 날짜 (지난 번 로그 파일을 검색하는 데 사용됨)에서 지난 7 일간의 날짜 문자열을 생성하고 싶습니다. 는 나는이 라인이 작업을 수행하려고 : % 내가 오류가돼지 스크립트에서 쉘 명령을 실행하는 중 오류가 발생했습니다.

CMD7 input= ; for i in {1..6}; do d=$(date -d "$DATE -i days" "+%Y-%m-%d"); input="\$input\$d,"; done; echo \$input 선언 "ERROR 2999 : 예기치 않은 내부 오류 오류 실행 쉘 명령을 : 입력 =;에 대한 전에서 {1..6}. d = $ (date -d "2012-07-10 -i days" "+ % Y- % m- % d"); input = "$ input $ d"; 완료; 종료 코드로 명령 종료 127 "
그러나 쉘 명령은 돼지 외부에서 완벽하게 실행됩니다. 나는 여기서 무엇이 잘못되고 있는지 정말로 확신하지 못한다.

감사합니다.

답변

6

나는 실용적인 해결책을 가지고 있지만 원하는만큼 간소화되지는 않았지만 본질적으로 돼지가 선언문에서 복잡한 쉘 문을 실행하도록 관리하지 않습니다.

내가 먼저 쉘 스크립트 (의이 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)}) 
관련 문제