Arrays 如何将数组日期添加到datediff计算中
新手在这里学习bash脚本,如果你有时间,可以在这方面提供一些帮助。我的客户上传文件,每个文件名都有一个日期戳,如下所示:Arrays 如何将数组日期添加到datediff计算中,arrays,bash,average,datediff,Arrays,Bash,Average,Datediff,新手在这里学习bash脚本,如果你有时间,可以在这方面提供一些帮助。我的客户上传文件,每个文件名都有一个日期戳,如下所示: * 20170815041135 * 20170820041135 * 20170823071727 * 20170826040609 * 20170828050704 * 20170830153011 我需要计算每次上传之间的天数,然后找到列出的上传的平均间隔 我可以用这个命令找到两个日期之间的日期差 echo $(( ($(date --date="20
* 20170815041135
* 20170820041135
* 20170823071727
* 20170826040609
* 20170828050704
* 20170830153011
我需要计算每次上传之间的天数,然后找到列出的上传的平均间隔
我可以用这个命令找到两个日期之间的日期差
echo $(( ($(date --date="20170831" +'%s' ) - $(date --date="20170821" +'%s')) / (60*60*24) ))
给10
要执行多个日期,我已经读到我需要一个数组,所以这里是我在一个数组中上传日期的范围
array=( `20170830153011`,`20170828050704`,`20170826040609`,`20170823071727`,`20170820041135`,`20170815041135` )
我读过,我需要这样循环计算
for i in "${array[@]}" do
?
如何将数组日期添加到计算中?将日期时间添加到数组中:
timestamps=(
20170815041135
20170820041135
20170823071727
20170826040609
20170828050704
20170830153011
)
现在让我们将其转换为大纪元:
epochs=()
for timestamp in "${timestamps[@]}"; do
iso8601=$(sed -r 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3T\4:\5:\6/' <<<"$timestamp")
epochs+=( "$(date -d "$iso8601" "+%s")" )
done
printf "%s\n" "${epochs[@]}"
现在我们可以迭代它们来计算差异。请注意,bash数组索引从零开始:
n=0
sum=0
for ((i=1; i < "${#epochs[@]}"; i++ )); do
((n++, diff=(${epochs[i]} - ${epochs[i-1]}), sum+=diff))
echo "diff $n = $diff seconds = $((diff/86400)) days"
done
echo "average = $((sum/n)) seconds = $((sum/n/86400)) days"
从1970年开始以秒为单位转换日期。 计算差额。
我希望bash date函数知道从该日期开始考虑夏令时。“每个文件名中都有一个日期戳”--完整的文件名是什么?XXX_1_20170830200211.bin
filename=XXX_1_20170830200211.bin;tmp=${filename%.bin};datestamp=${tmp##*.}
--谢谢你,格伦,非常感谢你这样安排
n=0
sum=0
for ((i=1; i < "${#epochs[@]}"; i++ )); do
((n++, diff=(${epochs[i]} - ${epochs[i-1]}), sum+=diff))
echo "diff $n = $diff seconds = $((diff/86400)) days"
done
echo "average = $((sum/n)) seconds = $((sum/n/86400)) days"
diff 1 = 432000 seconds = 5 days
diff 2 = 270352 seconds = 3 days
diff 3 = 247722 seconds = 2 days
diff 4 = 176455 seconds = 2 days
diff 5 = 210187 seconds = 2 days
average = 267343 seconds = 3 days