昨天写了一篇《Execl轻松计算日期时间差一例》在execl表格中统计FTP传输所用时间,其开始时间是从FTP服务器上查看目录创建的时间,如果在服务器上统计那就跟结束时间一样,直接从lftp日志中来获取(这里的时间跟FTP服务器上取到的时间略有差异,一方面可能因为服务器时间不同步,另一方面开始传输和创建文件夹时间也不可能同步),获取后使用shell计算一下时间差。
先查看一下有多少条传输记录:272万多
一、获取开始时间:
grep "2016-10" .lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2
使用grep在 文件【lftp/transfer_log】中搜索【2016-10】,然后取第一行,然后使用cut命令使用空格分隔取第1、2部分得到开始时间,例如:
[root@192.168.10.5 ~]#grep "2016-10" .lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2
2016-10-19 19:41:47
二、获取结束时间:
前文也有提到:这里使用tac命令
[root@192.168.10.5 ~]#tac .lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2
2016-10-24 00:40:24
三、计算时间差:
开始时间转换为时间戳:即自1970-01-01 08:00:00以来经过的秒数。(有的机器是1970-01-01 00:00:00,因为时区不一样,execl中是1900-1-1 00:00:00)
当前机器:date +%s -d "1970-01-01 08:00:01"命令执行的结果是1;
date +%s -d "2016-10-19 19:41:47"
1476877307
结束时间转换为时间戳:
1477240824
结束时间戳-开始时间戳=1477240824-1476877307=363517
即时间差是363517秒,6058.6分,100.9小时,4.2天;
四、shell脚本:
#!/bin/bash
#author: Chuang
#date: 2016-10-29
end_time=$(tac /root/.lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2)
start_time=$(grep "2016-10" /root/.lftp/transfer_log | head -n 1 | cut -d ' ' -f1,2)
time1=$(date +%s -d "$end_time")
time2=$(date +%s -d "$start_time")
time=$(($time1-$time2))
d=$(($time/86400))
h=$((($time%86400)/3600))
m=$(((($time%86400)%3600)/60))
s=$(((($time%86400)%3600)%60))
echo "Total time: $d days $h hours $m minutes $s seconds"
执行结果如下:
【结果】某服务器,272万文件64G上传用时约:4天4小时58分37秒;
【总结】shell写的也不是很多,当前脚本只是功能的实现,如果有更好的方法欢迎指教。
date +%s -d:+%s
使用$( )引用其他命令执行的结果;
使用$(())进行整数运算,除法、取余数;
8400即一天的秒数:24*60*60;
天数使用除法计算,小时取余后再除以3600秒,依次类推。
本文暂时没有评论,来添加一个吧(●'◡'●)