2012-09-03 21 views
0

我有一半的C类,也许有一两个shell脚本是我写作从经验中绘制的。我正在尝试解析计划中的数据,以便从终端将其上传到Google日历。我收到的日程中的文本这样的块:解析日程表以上传到Google日历

星期六2012年9月1日00:00:00 GMT-0700(PDT)星期六2:00 PM 11:00 PM

太阳2012年9月2日00: 00:00 GMT-0700(PDT)周日00:00 AM 00:00 AM

星期一2012年9月3日00:00:00 GMT-0700(PDT)周一上午9:00下午6:00

星期二2012年9月4日00:00:00 GMT-0700(PDT)周二9:00 AM 6:00 PM

Wed Sep 05 2012 00:00:00 GMT-0 700(PDT)周三00:00 AM 00:00 AM

星期四2012年9月6日00:00:00 GMT-0700(PDT)周四8:00 AM 4:00 PM

周五2012年9月7日00:00:00 GMT-0700(PDT)周五10:00 AM至7:00 PM

我也想通了,与googlecl我可以输入这个到我的终端:

$谷歌日历添加“09月03日工作9至6“

然后我会得到一个日历事件,然后我可以自动同步到我的手机。

我已经通读了一些关于sed和awk的文档,弄清楚我可以用这些来抓住每一行的第5到第10(即Sep 01)字符和转换开始和结束的时间,添加“工作”标题,并将其直接传递给googlecl。尽管如此,我还没有得到它。

我也试过在C中研究文件I/O,因为我可以将我的日程表导出到一个文本文件中,然后可能使用C将日程表以普通英语传递给Google日历。

是sed和awk这样做的首选方式? (我想这只是普通的* nix命令是我的第一选择,如果我能弄明白的话)我应该用C编写一个小程序来做到这一点吗?任何帮助(即使它只是连接到我最喜欢的教程,所以我可以做更多的阅读),将不胜感激,因为我发现谷歌搜索的许多网页都很长,有点在我头上。谢谢。

+0

所以我发现了关于剪切,这似乎可能真的有帮助。我现在有这条小线:cat schedule | grep 00:00 | cut -b5-10 –

+0

cat schedule | grep 00:00 | cut -b5-10 -b41-65 这会给我一个很好的输出,像这样:9月06日星期四下午1:30 PM 9:00 PM所以现在我只需要用“Work”一词来替换一周中的一天的名字,并将每条线分别传递给googlcl。 –

回答

2
awk '{ if ($9 != $10) {print "google calendar add \"" $2, $3, "Work", $9, "to", $10"\""}}' cal 

结果:

google calendar add "Sep 01 Work 2:00PM to 11:00PM" 
google calendar add "Sep 03 Work 9:00AM to 6:00PM" 
google calendar add "Sep 04 Work 9:00AM to 6:00PM" 
google calendar add "Sep 06 Work 8:00AM to 4:00PM" 
google calendar add "Sep 07 Work 10:00AM to 7:00PM" 

说明:

if ($9 != $10) {...} 

如果他们看起来你并不需要在您的日历进入他们一样。此外,隐式检查非空行。

print "google calendar add \"" $2, $3, "Work", $9, "to", $10"\"" 

用相关字段打印字符串,转义引号。

编辑:至于自动执行它,有相当一些微妙的引用问题正在进行,所以把这条线放在for循环中并不是微不足道的(对我来说!)。一个简单的方法是将结果存储在“文件”中,然后存储“sh文件”。

+0

这很好,谢谢!它甚至解决了我没有问过的问题,这是我没有工作的日子以及他们如何上市(上午00:00 - 上午00:00工作)的问题,所以我很欣赏这一点。我刚刚将输出结果发送到一个文件中,并将它运行在我的shell中,然后我在Google Cal上安排了我的日程安排。时间表每周自动在周六上午12:01发布,所以我没有任何问题按照计划运行这样的三件事:一次是获取,一次是解析并输出googlecl命令(你做了什么),一次是发布。 –