Shell 检查是否在给定的时间戳范围内创建了目录
所做的工作是能够在一个目录上执行hadoop fs-ls,其日期范围(如20170517到20170521)的格式为(/a/b/c/d/e/f/g/h/test/exp_dt=YYYY-MM-DD)。是否有一种方法可以捕获/知道给定日期范围的目录是否属于您给定的时间戳范围。这将有助于区分分区是旧运行还是相同日期的新运行Shell 检查是否在给定的时间戳范围内创建了目录,shell,find,Shell,Find,所做的工作是能够在一个目录上执行hadoop fs-ls,其日期范围(如20170517到20170521)的格式为(/a/b/c/d/e/f/g/h/test/exp_dt=YYYY-MM-DD)。是否有一种方法可以捕获/知道给定日期范围的目录是否属于您给定的时间戳范围。这将有助于区分分区是旧运行还是相同日期的新运行 eg: startdate=20180517 enddate=20180521 timestamp1=2018-05-18 13:00 timestamp2=2018-05-2
eg:
startdate=20180517
enddate=20180521
timestamp1=2018-05-18 13:00
timestamp2=2018-05-22 13:00
inputPath=/a/b/c/d/e/f/g/h/test/
hlsCmd=`hadoop fs -ls $inputPath | awk '{timestamp = $6 ; hourMin = $7 ; path = $8 ; print timestamp; print hourMin; print path; print ","}'`
echo $hlsCmd
ingestFlag=1
startdate=20180517
enddate=20180521
date="$enddate"
dates=()
for (( date="$enddate" , cnt=1, missCnt=0, foundCnt=0 ; $date >= $startdate ; date="$(date --date="$date - 1 days" +'%Y%m%d')" , cnt++));
do
dates+=( "$date" )
if [ $ingestFlag == 1 ]; then
curDate="$(date --date="$date" +'%Y-%m-%d')"
else
curDate="$(date --date="$date" +'%Y/%m/%d')"
fi;
curDateYYYYMMDD="$(date --date="$date" +'%Y%m%d')"
fmeYYYYMM="$(date --date="$date + 1 month" +'%Y%m')"
if echo "$hlsCmd" | grep -q "$curDate" ; then
((foundCnt++))
echo "$inputPath : $curDate found"
# echo "$inputPath : $curDate found" >> $foundFileName;
else
((missCnt++))
echo "$inputPath : $curDate missing $curDateYYYYMMDD"
echo "$inputPath : $curDate missing $curDateYYYYMMDD" >> $missingFileName;
fi;
output:
/a/b/c/d/e/f/g/h/test/ : 2018-05-21 found
/a/b/c/d/e/f/g/h/test/ : 2018-05-20 found
/a/b/c/d/e/f/g/h/test/ : 2018-05-19 found
/a/b/c/d/e/f/g/h/test/ : 2018-05-18 found
/a/b/c/d/e/f/g/h/test/ : 2018-05-17 found
sample output of $hlsCmd=, 2018-06-06 10:33 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-03 , 2018-06-07 12:30 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-04 , 2018-06-08 10:48 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-05 , 2018-06-08 14:38 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-06 , 2018-06-09 10:23 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-07 , 2018-06-10 11:13 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-08 , 2018-06-11 10:43 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-09 , 2018-06-12 11:16 /a/b/c/d/e/f/g/h/test/exp_dt=2018-06-10
拦截器:
问题是上述代码中的awk模式可以与目录的时间戳(YYYY-MM-DD)匹配,并抛出肯定的结果。其目的是查看特定范围的目录是否属于特定的时间戳。请告诉我可以做什么。可能重复@jeremysprofile:尝试获取Hadoop群集(hdfs)中路径的结果,而不是本地文件系统。所以它不是一个复制品。谢谢