AWK:计算包含日期的两列之间的差异



我有以下文件:

cat x.txt 
2020-01-04
2020-01-01
2008-03-12
2021-08-09

我正在尝试编写一个输出以下内容的awk脚本:

2020-01-04  2022-03-09  795
2020-01-01  2022-03-09  798
2008-03-12  2022-03-09  5110
2021-08-09  2022-03-09  212

其中,第2列是当前日期,第3列是第1列和第2列之间的天数差。我已经开始了一个这样的脚本,但并没有真正得到它:

cat y
#!/usr/bin/env bash

awk '
BEGIN {
FS = OFS = "t"
str = "date +%Y-%m-%d"
str | getline date
d2 = mktime((gensub(/-/, " ", "g", date)) " 0 0 0")
d1 = mktime((gensub(/-/, " ", "g", $1)) " 0 0 0")
}
{
print $1, date, d2 - d1
}
' "${@:--}"

当我运行这个时,我得到以下内容:

./y x.txt 
2020-01-04  2022-03-09  1646737201
2020-01-01  2022-03-09  1646737201
2008-03-12  2022-03-09  1646737201
2021-08-09  2022-03-09  1646737201

我不知道如何处理约会,所以非常感谢您的帮助。

使用GNU awk实现时间函数:

$ cat tst.awk
BEGIN {
OFS = "t"
today = strftime("%Y-%m-%d")
today_secs = mktime(gensub(/-/," ","g",today) " 12 0 0")
secs_in_day = 24 * 60 * 60
}
{
secs = mktime(gensub(/-/," ","g",$1) " 12 0 0")
print $1, today, int( (today_secs - secs) / secs_in_day )
}

$ awk -f tst.awk x.txt
2020-01-04      2022-03-08      794
2020-01-01      2022-03-08      797
2008-03-12      2022-03-08      5109
2021-08-09      2022-03-08      211

在我的时区,目前是3/8,而不是3/9,因此天数比问题中的预期输出少1天。

最新更新