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