如何在bash脚本中给定日期参数获得一个月内的第二个星期日
我试图编写一个bash脚本,在给定的一天内合并24个文件。需求在白天改变,节省时间,我得到23或25个文件 因此,通过进一步的研究,我意识到日光节约从每年3月23日的第二个星期日开始,到11月25日的第一个星期日结束 我需要更多的输入来获取给定月份的第二个星期日,以便分别查找3月和11月的23个或25个文件 如果您能提供任何帮助,我将不胜感激 多谢各位 下面是一天内查找24个文件的示例代码-如何在bash脚本中给定日期参数获得一个月内的第二个星期日,bash,shell,Bash,Shell,我试图编写一个bash脚本,在给定的一天内合并24个文件。需求在白天改变,节省时间,我得到23或25个文件 因此,通过进一步的研究,我意识到日光节约从每年3月23日的第二个星期日开始,到11月25日的第一个星期日结束 我需要更多的输入来获取给定月份的第二个星期日,以便分别查找3月和11月的23个或25个文件 如果您能提供任何帮助,我将不胜感激 多谢各位 下面是一天内查找24个文件的示例代码- if [ -z "$1" ];then now=$(date -d "-1 days" +%Y-%m-%
if [ -z "$1" ];then
now=$(date -d "-1 days" +%Y-%m-%d);
else now=$1;
fi
load_date='load_date='$now
singlePath="$newPath/$load_date"
fileCount=$(hdfs dfs -ls -R $hdfsPath/$load_date/ | grep -E '^-' | wc -l)
path=$hdfsPath/$load_date
if [ $fileCount -eq 24 ]; then
echo "All files are available for "$load_date;
hadoop fs -cat $path/* | hadoop fs -put - $singlePath/messages.txt
else echo $fileCount" files are available for "$load_date"! Please note, few files are being missed";
fi
我不会硬编码DST传输的日期。我会数一数“今天有多少小时”:
需要注意的一点是:由于bash只进行整数运算,如果差值不是86400而是86399,则得到:
$ echo $((86399 / 3600))
23
因此,最好先查询昨天的时间,因为在两次约会通话之间,秒数滴答作响的可能性很小,但不是零:
diff=$(( -$(date -d yesterday +%s) + $(date -d now +%s) ))
这里,$diff将是86400或86401(对于非DST过渡日),除以3600将得到24而不是23。使用diff=$((($(日期-d昨天+%s)+$(日期-d现在+%s)))
approach如果在午夜前1秒运行脚本时秒数滴答滴答地过去,您仍然会遇到问题,因为如果您在4/27日晚上11:59:59开始运行脚本,“昨天”可能是4/26,但第二秒滴答滴答地过去,而“现在”则是4/28。只要在diff
中对date
的两次调用中都使用一个特定的日期,那么两次调用之间的秒数是否有变化并不重要。e、 g.tgt=$(日期+'%F');差异=$($(日期-d“$tgt+1天”+'%s')-$(日期-d“$tgt”+'%s'))
$ diff=$(( $(date -d "2019-11-03 23:59:59" +%s) - $(date -d "2019-11-02 23:59:59" +%s) ))
$ echo $(( diff / 3600 ))
25
$ echo $((86399 / 3600))
23
diff=$(( -$(date -d yesterday +%s) + $(date -d now +%s) ))