[英]AWK equality comparison of two string variables fails
今天的日期是:
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
OUTPUT:
32 (B) AWS Cost Explorer +customerX due:2018-09-26
命令:
grep -e "t:$DATE" -e "due:$DATE" ./t
OUTPUT:
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”)上沒有輸出,而在所提供的消毒任務列表數據上,它可以正常工作。 大於或等於“預定>日期”的情況總是會給我今天的日期。
原始問題:
這是比較日期字符串變量的正確方法還是有更好的方法?
更多信息
好的,我發現了問題:我的示例數據不能完全反映我正在運行的todo.txt-cli腳本實際執行的操作。
我的命令實際上是:
todo.sh ls | awk -v date="$(date +%Y-%m-%d)" -f z.awk.
吉娜·特拉帕尼 ( Gina Trapani )驚人的todo.txt格式的待辦事項列表管理器( 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””嗎?
更改此:
}
$0 = orig
對此:
}
sched = substr(sched,1,10)
$0 = orig
從Sched中修剪所有尾隨的字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.