Сбой сравнения равенства двух строковых переменных в AWK - PullRequest
0 голосов
/ 27 сентября 2018

Сегодняшняя дата:

DATE=$(date +%Y-%m-%d)
echo $DATE
2018-09-26

У меня есть этот awk-скрипт с именем z.awk:

{
    orig = $0
    sched = ""
    for (i=NF; i>0; i--)
    {
        if ( sub(/^t:/,"",$i) )
        {
            sched = $i
            #print sched
            break
        }
        else if ( sub(/^due:/,"",$i) )
        {
            sched = $i
        }
    }
    $0 = orig
}
sched == date

ФАЙЛ ДАННЫХ (./t):

33 (A) How to build a time machine t:2018-09-27 due:2018-09-26
02 (A) Search the IT Jobs due:2018-09-20
32 (B) AWS Cost Explorer +customerX due:2018-09-26
05 (B) Barclays Gaget Protection t:2018-09-24
37 (B) Barclay’s App Reregister t:2018-09-24 due:2018-09-22
34 (B) Book winter sun flights t:2018-09-25 due:2018-09-25
03 (B) Buy Raspberry Pi 3 t:2018-09-22
04 (B) Buy Vaporizer +health @web t:2018-09-27 due:2018-09-22
38 (B) Dr Apt - Change dates! t:2018-09-29

КОМАНДА:

cat ./t | awk -v date="$(date +%Y-%m-%d)" -f z.awk

ВЫХОД:

32 (B) AWS Cost Explorer +customerX due:2018-09-26

КОМАНДА:

grep -e "t:$DATE"  -e "due:$DATE" ./t

ВЫХОД:

33 (A) How to build a time machine t:2018-09-27 due:2018-09-26
32 (B) AWS Cost Explorer +customerX due:2018-09-26

GREP делает логическийИЛИ сравнение и дает мне дополнительную строку вывода, которая (текущая дата: дата), в которой я не заинтересован, так как я отложил эту задачу до завтра сейчас - кнопка повтора.

С помощью скрипта AWK данные из моего реального несанализованного списка задач не дают мне выходных данных при сравнении, равном сравнению ("sched == date"), где, как и на предоставленных данных списка очищенных задач, это работает,То же самое относится к значению, большему или равному «sched> date», всегда дополнительно даёт мне сегодняшнюю дату.

ОРИГИНАЛЬНЫЙ ВОПРОС:

Это правильный способ сравнения строковых переменных даты илиесть лучший способ?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Хорошо, я обнаружил проблему: мои примеры данных не полностью отражают то, что на самом деле выполняет выполняемый мной скрипт todo.txt-cli.

Моя команда на самом деле:

todo.sh ls | awk -v date="$(date +%Y-%m-%d)" -f z.awk. 

Джина Трапани * Удивительно Формат todo.txt Менеджер списков задач ( Задача.sh ) выводит символы ANSI COLOR в начале и конце каждой строки, например так:

^[[0;32m40 (B) A/C Fixed? +fittings @web @cal^[[0m
^[[0;32m4343 (B) Pay Rent +finance @web t:2018-09-27 due:2018-09-26^[[0m
^[[0;32m42 (B) Make Calls +workship @call t:2018-09-27^[[0m
^[[0;32m41 (B) Flying Lessons - Book +sports @apts due:2018-09-27^[[0m

Так что я предполагаю, что скрипт awk должен игнорировать символы конца строки "^ [[0m", когдаделать операции сравнения?

1 Ответ

0 голосов
/ 27 сентября 2018

Измените это:

}
$0 = orig

на это:

}
sched = substr(sched,1,10)
$0 = orig

, чтобы обрезать любые конечные символы из sched.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...