AWK, сравнивающий значение даты строки из списка задач с сегодняшней датой - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть список задач todo.txt, который я хотел бы отфильтровать, чтобы показать все задачи, запланированные на даты в будущем или на сегодняшний день, т. Е. - не показывать запланированные даты в прошлом и показывать только те задачи, на которые запланирована дата.

Строки и порядок файлов иногда изменяются и включают «пороговую (думаю, отложить / отложить задачу до ...) дату в формате: t: date +% Y-% m-% d, которая говорит« don »не запускать эту задачу до этой даты '.

Файл данных:

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: », и значение« due: », если« t: »отсутствует?

  2. Дата больше, чем(«>»), Кажется, работает, но равно не работает («> =«)

1 Ответ

0 голосов
/ 23 сентября 2018
$ 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
...