AWK:计算包含日期的两列之间的差异
AWK: Computing the differences between two columns containing dates
我有以下文件:
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", )) " 0 0 0")
}
{
print , 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",) " 12 0 0")
print , 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。
我有以下文件:
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", )) " 0 0 0")
}
{
print , 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",) " 12 0 0")
print , 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。