0

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

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

2012 年 9 月 2 日星期日 00:00:00 GMT-0700 (PDT) 星期日 00:00AM 00:00AM

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

2012 年 9 月 4 日星期二 00:00:00 GMT-0700 (PDT) 星期二上午 9:00 下午 6:00

2012 年 9 月 5 日星期三 00:00:00 GMT-0700 (PDT) 星期三 00:00 AM 00:00 AM

2012 年 9 月 6 日星期四 00:00:00 GMT-0700 (PDT) 星期四上午 8:00 下午 4:00

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

我发现使用 googlecl 我可以在终端中输入:

$ google calendar 添加“Sep 3 Work 9 to 6”

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

我已经阅读了一些关于 sed 和 awk 的文档,认为我可以使用它们来抓取每行的第 5 到第 10(即 9 月 1 日)字符以及轮班开始和结束的时间,添加“工作”标题,并将其直接通过管道传输到 googlecl。不过我还没弄下来。

我还尝试在 C 中研究文件 i/o,因为我可以将上面看到的日程表导出到文本文件,然后可能使用 C 将日程表以更简单的英语通过管道传输到 Google 日历。

sed 和 awk 是这样做的首选方式吗?(如果我能弄明白的话,我想只用常见的 *nix 命令是我的首选)我应该用 C 编写一个小程序来做到这一点吗?任何帮助(即使只是将我链接到您最喜欢的教程,以便我可以做更多阅读)将不胜感激,因为我发现谷歌搜索的许多页面都非常长而且有点超出我的头脑。谢谢。

4

1 回答 1

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 文件”中。

于 2012-09-03T05:58:55.970 回答