2014-01-16 82 views
0

我相信這對大師來說很容易。我正在努力完成我的任務和待辦事項系統。 目前我只是簡單地得到了一個我在VI中編輯的降價文件,並且設置了標籤來防止我的事情發生。Grep/awk大於日期

它看起來像這樣

# My project | @home 
- Do this this | @home 

我想同步在我的設備,這個文件並使用塔斯克/ grep的Android上向我展示基於我在待辦事項。

現在我得在這裏我要補充的東西在未來做的,所以我想的有點像

- Do this thing in the future | @home @2014-02-01 

我怎麼能排除該行直到日期爲2014-02舞臺-01? 我現在命令只提取@Home待辦事項是

grep -e "@home" myfile | cut -d '|' -f1 

我相信有這樣的一種方式,但谷歌/計算器並沒有導致我朝着正確的方向呢!

幫助表示讚賞,

感謝

艾倫

+0

對於它的價值,任務Coach是,如果你不希望推出自己的一個好。 http://taskcoach.org/ – cowboydan

回答

1

用awk:

DAT=$(date +%Y%m%d) # get today's date, for example 20140117 
awk 'NF>3{gsub(/-/,"",$NF);if ($NF>d) next}{print $1}' FS="[|@]" d=$DAT file 

# My project 
- Do this this 
+0

更新,這個怎麼樣? – BMW

+0

你可以像這樣在'awk'中讀取日期:'awk'NF> 3 {gsub(/ - /,「」,$ NF); if($ NF> d)next} {print $ 1}'FS = 「[| @]」d = $(日期+%Y%m%d)文件' – Jotne

+0

這太棒了!謝謝。現在我已經指出了我正確的方向,因爲理想情況下,我想將@tags放在任何位置,但這不是一個大問題。 –

2

使用Perl

perl -MTime::Piece -ne ' 
    BEGIN {$now = localtime} 
    print unless /@(\d{4}-\d\d-\d\d)/ and $now < Time::Piece->strptime($1, "%Y-%m-%d") 
' <<END 
# My project | @home 
- Do this this | @home 
- Do this thing in the future | @home @2014-02-01 
END 
# My project | @home 
- Do this this | @home 

此外,GNU awk的

gawk ' 
    BEGIN {now = systime()} 
    match($0,/@([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])/, m) { 
     time = mktime(m[1] " " m[2] " " m[3] " 0 0 0") 
     if (time > now) next 
    } 
    1 
' 
+0

謝謝你,謝謝格倫!這兩個工作,不幸的是沒有我安裝它們,perl/gawk在android上不可用 –

相關問題