首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要使用bash来计算日期差异

我需要使用bash来计算日期差异
EN

Unix & Linux用户
提问于 2020-07-05 15:04:56
回答 2查看 964关注 0票数 2

我有日期的文件:

代码语言:javascript
运行
复制
Mar 16
Mar 12
Mar 13
Mar 19
Mar 14
Mar 17

我需要计算到现在为止的天数。我带着这个功能来:

代码语言:javascript
运行
复制
datediff() {     
    d1=$(date -d "$1" +%s);     
    d2=$(date -d "$2" +%s);     
    echo $(( (d1 - d2) / 86400 )) days; 
}
$ datediff 'now' '13 Mar'
114 days

但是我需要一个循环来计算每一行

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-07-05 15:33:46

您可以使用while循环,其中条件基于从标准输入读取的能力:

代码语言:javascript
运行
复制
$ cat input.txt
Mar 16
Mar 12
Mar 13
Mar 19
Mar 14
Mar 17
$ cat ex.sh
#!/bin/bash

datediff() {
    local d1="$(date -d "$1" +%s)"
    local d2="$(date -d "$2" +%s)"

    echo "$(( (d1 - d2) / 86400 )) days"
}

while read line; do
    datediff 'now' "${line}"
done < "${1}"
$ ./ex.sh input.txt
111 days
115 days
114 days
108 days
113 days
110 days

这里的脚本只有一个参数:输入文件。虽然它可以从文件中读取一行,但它调用传递datediffnow函数和它从文件中读取的line内容。

票数 5
EN

Unix & Linux用户

发布于 2020-07-06 12:26:25

添加可靠的日历支持是一个困难的问题,我建议使用一个专门的程序。幸运的是,有人为我们做了艰苦的工作。

来自http://www.unixwiz.net/tools/datemath.html

很多时候,我们需要在约会中做一些计算--比如“今天+7天”--但是在传统的MM/DD/YYYY格式中,这是非常棘手的(尤其是在shell脚本中)。出于这一需要,我们构建了datemath工具,它可以从命令行或shell脚本执行这些功能。示例:

代码语言:javascript
运行
复制
$ datemath today + 5
06/23/2003

$ datemath '12/25/2003 - today'
188

$ datemath today + 5 weeks
07/25/2003

when will my machine be up for one year?
$ uptime
 11:09am  up 317 days, 15:38,  7 users,  load average: 0.16, 0.04, 0.01
$ datemath today + 365 - 317
10/24/2003

您可以从网站下载源代码并构建它。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/596853

复制
相关文章

相似问题

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