【问题标题】:AWK comparing string date value from task list to today's dateAWK 将任务列表中的字符串日期值与今天的日期进行比较
【发布时间】:2018-10-09 01:10:50
【问题描述】:

我有一个 todo.txt 任务列表,我想对其进行过滤以显示任何安排在未来或今天的日期的任务,即 - 不显示过去的安排日期,只显示已安排日期的任务。

文件行和顺序有时会更改,以包含一个“阈值”(想想打盹/推迟任务直到...),格式为:t:date +%Y-%m-%d,表示“不要开始”这个任务直到这个日期'。

数据文件:

50 (A) Testing due date due:2018-09-22 t:2018-09-25
04 (B) Buy Socks, Underwear t:2018-09-22
05 (B) Buy Vaporizer t:2018-09-23 due:2018-09-22
16 (C) Watch Thor Ragnarock
12 (B) Pay Electric Bill due:2018-09-20 t:2018-09-25
x 2018-09-21 pri:B Buy Prebiotics +health @web due:2018-09-21

到目前为止,我想出了这个:

cat t | awk -F: -v date="$(date +%Y-%m-%d)" '/due:|t:/ $2 >= date || $3 >= date { print $0}'|
nl

问题是,日期比较是在“due:”字段上进行的,因为它通常位于“t:”字段之前。此外,输出早于今天的条目。

输出:

 1  50 (A) Testing due date due:2018-09-22 t:2018-09-25
 2  05 (B) Buy Vaporizer t:2018-09-23 due:2018-09-22
 3  12 (B) Pay Electric Bill due:2018-09-20 t:2018-09-25

问题:

  1. 如果“t:”存在,我如何正确地与“t:”值进行日期比较?

  2. 日期大于 (“>”) 似乎有效,但等于无效 (“>=”)

【问题讨论】:

  • 那么这里的实际问题是什么——解析输入列表并仅返回当前日期在该行的最新日期之后的行?

标签: regex date awk match


【解决方案1】:
$ cat tst.awk
{
    orig = $0
    sched = ""
    for (i=NF; i>0; i--) {
        if ( sub(/^t:/,"",$i) ) {
            sched = $i
            break
        }
        else if ( sub(/^due:/,"",$i) ) {
            sched = $i
        }
    }
    $0 = orig
}
sched >= date

$ awk -v date="$(date +%Y-%m-%d)" -f tst.awk file
50 (A) Testing due date due:2018-09-22 t:2018-09-25
05 (B) Buy Vaporizer t:2018-09-23 due:2018-09-22
12 (B) Pay Electric Bill due:2018-09-20 t:2018-09-25

【讨论】:

  • 成功了。 Ed,对于我们所有非 awk 专家,您能用文字解释一下您的脚本在做什么的一般方法吗?
  • 扩展此脚本:有时我想知道任务 ">=",而在其他时候,"
  • 它只是在寻找以 t: 或 due: 开头的字段,从行尾返回。当它找到到期时:它会记住 dat 并继续寻找 t:。当它找到 t: 时,它会记住日期并停止查找。然后它只是将输入(sched)中的日期与日期输入进行比较,如果结果为真,则调用打印当前行的默认操作。
  • 写您的第二条评论 - 只需更改代码中的 >= 即可进行任何您想要的比较。
  • 我尝试将该行写为“计划比较日期”,然后像这样添加变量 (awk -v date="$(date +%Y-%m-%d)" -v 比较=">=" -f ./date.awk) 但对我不起作用。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 2013-02-10
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多