パラメーターに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
) 

PS: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

関連情報