【问题标题】:How do I add my array dates into the datediff calculation如何将我的数组日期添加到 datediff 计算中
【发布时间】:2018-02-10 20:42:04
【问题描述】:

新手在这里编写 bash 脚本,如果您有时间,可以在这方面使用一些帮助。我的客户上传,每个人的文件名中都有一个日期戳,如下所示:

* 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 
  ?

如何将我的数组日期添加到计算中?

【问题讨论】:

  • "每个文件名中都有一个日期戳" -- 完整的文件名是什么?
  • XXX_1_20170830200211.bin
  • filename=XXX_1_20170830200211.bin; tmp=${filename%.bin}; datestamp=${tmp##*_} -- 见gnu.org/software/bash/manual/…

标签: arrays bash average datediff


【解决方案1】:

你的日期时间到一个数组中:

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[@]}"
1502784695
1503216695
1503487047
1503734769
1503911224
1504121411

现在我们可以遍历它们来计算差异。请注意,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"
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

【讨论】:

  • 谢谢格伦,你把它布置成这样真是太好了
【解决方案2】:

从 1970 年开始以秒为单位转换日期。 计算差异。 我希望 bash 日期函数知道从该日期开始考虑夏令时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2010-10-08
    • 2021-05-30
    相关资源
    最近更新 更多