首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix环境-提取日期字符串并进行比较

Unix环境-提取日期字符串并进行比较
EN

Stack Overflow用户
提问于 2020-05-18 15:56:18
回答 1查看 45关注 0票数 1

有人能帮助我使用UNIX脚本从文件的最后一行提取日期,并将其与当前日期进行比较吗?如果文件中的日期在当前日期之间有1小时的延迟,那么回显是吗?

File.txt

代码语言:javascript
复制
18:48:43 iLIKEtoMOVEitMoveIT
18:58:43 iLIKEtoMOVEitMoveIT
19:22:43 iLIKEtoMOVEitMoveIT
clear line

到目前为止,我已经想出了如何得到最后一行的时间:

代码语言:javascript
复制
tail -n 2 File.txt | head c-8

输出= 19:22:43以及如何将当前日期仅作为时间存储在变量中:

代码语言:javascript
复制
TheCurrentDate="date +"%T""

如何比较这2 HH:MM:SS,并计算出它们之间是否已经过了一个小时,然后回答“是”。全部放进script.sh

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 03:23:36

代码语言:javascript
复制
DATE=$(tail -n 2 File.txt | cut -c 1-8 | head -n 1)
FROM_FILE=$(date -d "$DATE" +%s)
NOW=$(date +%s)
DIFFERENCE=$((NOW - FROM_FILE))

if [ $DIFFERENCE -le 3600 ]; then
    echo YES
fi

其想法是使用+%s将时间戳转换为秒。然后你只需比较数字。

编辑

您的File.txt应该看起来像一个日志文件,在这个日志文件中,日志程序不需要预先准备日期。正如乔纳森·莱弗勒指出的那样,NOW可能是00:15FROM_FILE可能是23:45

在这种情况下,date会将FROM_FILE解释为今天的结束,而不是昨天的结束。这可以是临时固定的:

代码语言:javascript
复制
DATE=$(tail -n 2 File.txt | cut -c 1-8 | head -n 1)
FROM_FILE=$(date -d "$DATE" +%s)
NOW=$(date +%s)

if [ $FROM_FILE -gt $NOW ]; then
    # it's not really in the future, it's from yesterday
    FROM_FILE=$((FROM_FILE - 24 * 3600))
fi

DIFFERENCE=$((NOW - FROM_FILE))

if [ $DIFFERENCE -le 3600 ]; then
    echo YES
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61873744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档