過去2年間に毎週スケジュールされたHadoopジョブ

過去2年間に毎週スケジュールされたHadoopジョブ

私はLinuxシェルスクリプトを初めて使用します。現在、私は1日のパーティションに2年間のデータを保存する必要があるプロジェクトを進めています。毎日のパーティションには、1つのファイルにマージする必要がある200個のファイルがあります。

現在の日付を活用した変数を入力するコードを開発しました。以下はコードの断片です。手動介入なしでループを使用する方法を探しています。週に一度実行する必要があります。

daysToDeduct=<number>
day1=$((daysToDeduct-1))
day2=$((daysToDeduct-2))
day3=$((daysToDeduct-3))
day4=$((daysToDeduct-4))
day5=$((daysToDeduct-5))
day6=$((daysToDeduct-6))
day7=$((daysToDeduct-7))

DAY1=`date --date="$day1 days ago" +%Y%m%d`
DAY2=`date --date="$day2 days ago" +%Y%m%d`
DAY3=`date --date="$day3 days ago" +%Y%m%d`
DAY4=`date --date="$day4 days ago" +%Y%m%d`
DAY5=`date --date="$day5 days ago" +%Y%m%d`
DAY6=`date --date="$day6 days ago" +%Y%m%d`
DAY7=`date --date="$day7 days ago" +%Y%m%d`


hadoop fs -getmerge  /apps/..../$DAY1  /.../$DAY1
.

...
hadoop fs -getmerge  /apps/..../$DAY7  /.../$DAY7

事前にありがとう

答え1

ここに役立ついくつかのコードがあります。

#!/bin/bash
for i in $(seq 1 10)
do 
    echo $i: $(date --date="$i days ago" +%Y%m%d)
done

この部分は以下を印刷します。

1: 20191006
2: 20191005
3: 20191004
4: 20191003
5: 20191002
6: 20191001
7: 20190930
8: 20190929
9: 20190928
10: 20190927
  1. secを使用して1から200まで繰り返します。
  2. 日付として定義します(単に印刷します)。

役に立ったことを願っています:)

改善のために@Stephen Kittに感謝します!

関連情報