两个字符串变量的AWK相等比较失败

时间:2018-09-26 22:16:02

标签: string variables awk comparison

今天的日期是:

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

我有一个名为z.awk的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脚本时,我的真实未消毒任务列表中的数据在等值比较(“预定==日期”)上没有输出,而在提供的经过消毒的任务列表数据上,它可以正常工作。大于或等于“预定>日期”的情况总是会给我今天的日期。

原始问题:

这是比较日期字符串变量的正确方法还是有更好的方法?

更多信息

好的,我发现了问题:我的示例数据不能完全反映我正在运行的todo.txt-cli脚本的实际作用。

我的命令实际上是:

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

Gina Trapani令人惊叹的todo.txt format待办事项列表管理器(todo.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 :(得分:1)

更改此:

}
$0 = orig

对此:

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

修剪计划中的所有尾随字符。