2014-01-16 46 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上不可用 –

相关问题