매개변수에 Unix 타임스탬프 범위를 지정하세요.

매개변수에 Unix 타임스탬프 범위를 지정하세요.

bash에서 mrjob을 시작하고 있으며 unix 타임스탬프가 포함된 일련의 gz 파일을 매개변수로 전달해야 합니다 filename_9127381923.gz. 가장 간단한 방법으로 이를 수행하는 방법은 무엇입니까? 다행히 여러 파일 매개변수를 전달할 수 있습니다.

범위:

1413324000 (수요일 0:00)

1413410400 (목요일 0시)

의사 예:

$python my_mrjob.py 1413324000-1413410400.gz

답변1

범위 연산자를 사용하십시오.

echo {1413324000..1413324199}.gz

비슷하게,

$python my_mrjob.py {1413324000..1413324199}.gz

밀리초마다 파일이 존재하지 않는 경우:

$python my_mrjob.py  $(ls {1413324000..1413324199}.gz 2>/dev/null)

답변2

그렇게 간단하지는 않지만 나의 "선택한 무기"

python my_mrjob.py $(
for f in {1413324000..1413410400}; do [ -f filename_$f.gz ] && echo $f; done
) 

추신: IMHO Python 작업 자체는 존재하지 않는 파일을 건너뛰는 추가 지능과 함께 범위 입력을 허용하도록 수정되어야 합니다. 더 빠르고 쉬울 것입니다. {a..b} 구문은 게으른 반복자가 아닙니다. 실제로 모든 숫자를 생성하여 "for" 문에 전달합니다. 이로 인해 환경에 공간이 부족해질 수 있습니다.

답변3

가짜 테스트 파일 만들기: (이 예에만 해당)

$ touch filename_{1000000000..1000000099..5}.gz

출력에서 파일의 "시간" 범위를 가져 ls와서 다음으로 전달합니다 echo.

$ echo $(ls | awk -F'[_,]' '1000000044<=$2 && $2<=1000000066')

파일명_1000000045.gz 파일명_1000000050.gz 파일명_1000000055.gz 파일명_1000000060.gz 파일명_1000000065.gz

필요에 따라 echo전화번호로 바꾸세요.$python

관련 정보