我正在使用 ksh,并且有一个包含几行以下内容的文本文件。我试图将日期部分与当前日期进行比较并找出天数差异,然后将文件的“Server”和“Qmgr”部分输出到另一个文件
这是我的输入文件
server1 : Qmgr1 : 20 July 2017
server2 : Qmgr2 : 22 July 2017
server3 : Qmgr3 : 22 Dec 2015
如果当前日期与文件中的日期之间的差异小于 90 天,则预期输出应为
服务器3:Qmgr3
什么可能是最简单的方法来做到这一点。
答案1
尝试这个。该脚本读取命令行或标准输入上列出的文件,并打印每行的服务器和 qmgr 值,其中日期为未来 90 天或更短的时间。
#!/bin/sh
# also works with ksh, bash, zsh
now=$(date +%s)
ninety_days=$(( 90 * 24 * 60 * 60 ))
cat "$@" |
while read server colon qmgr colon2 qdate
do
future=$(date +'%s' -d "$qdate")
if [ $((future - now)) -lt $ninety_days ]
then
echo "$server $colon $qmgr"
fi
done
解释:
将“纪元”(1970-01-01 UTC)和当前时间之间的秒数存储在变量中now
:
now=$(date +%s)
计算 90 天包含的秒数:
ninety_days=$(( 90 * 24 * 60 * 60 ))
将从记录的最后 3 个字段读取的日期转换为“纪元”与该日期之间的秒数。存储在变量中future
(这样命名是为了在与变量比较时清楚起见now
):
future=$(date +'%s' -d "$qdate")
减去now
fromfuture
以获取当前日期与文件中的日期之间的秒数。我们已经计算了 90 天中包含的秒数,因此我们可以将其与future
和之间的差异进行比较now
。
if [ $((future - now)) -lt $ninety_days ]