0

在我们的 C++ 课程中,第一个模块是关于 bash 编程的。我们的讲师经常混合使用 shism 和 bashism 以及 csh 兼容性,最近使用了一个使用 awk 和 bash 的示例来获取本月的最后一个星期五。cal他用 bash 脚本和 awk解析。

用 bash 和 awk 解析这些数据是否被认为是不好的做法?最好的方法是简单地用 Unix 时间戳做数学吗?

4

2 回答 2

4

我会说这是 Unix 力量的一个很好的例子。获取 cal 的输出并对其进行处理以仅获取您感兴趣的信息。Awk 可能是这项工作的最佳工具,并且在我的选择中使用 cal 很聪明:

所以取输出:

$ cal
      May 2013      
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

我们知道星期五的日期将在第六列,但并非每一行都有第六列。所以我们想要第六列中最后一个无空条目的值。使用 awk 我会这样做:

$ cal | awk '$6{date=$6}END{print date}'
31

所以我们知道这个月的最后一个星期五是 31

这里真正奇怪的是为什么在你的 C++ 课上你没有学习 C++?

于 2013-05-16T16:51:46.013 回答
1

“最好”是非常相对的。

在现实世界中,您想做一些清晰且可维护的事情,并且使用 Unix 时间戳可能是也可能不是,这取决于程序的更大上下文。也许另一个系统正在使用不想了解 Unix 时间戳的结果。

对于你的大学课程,重点是学习一些东西,所以“最好”是完全不同的东西。学校并不总是最快的解决方案。有时你会绕道去接触你正在学习的风景。在这种情况下,使用 bash 和 awk 进行解析可能是最好的方法,因为它让您接触到 bash 和 awk 脚本。让我告诉你,当橡皮擦上路时,Unix 时间戳不会解决你所有的字符串处理问题。

(删除了关于您的问题含糊不清的注释。)

于 2013-05-16T16:47:01.577 回答