使用awk和bash解析人类可读数据是有害的,这是一种不好的做法

时间:2013-05-16 16:43:25

标签: bash parsing unix awk

在我们的C ++类中,第一个模块是关于bash编程的。我们的教练经常混合shisms和bashisms以及csh兼容性主义,最近使用awk和bash的例子来获得本月的最后一个星期五。他用bash脚本和awk解析cal

用bash解析这些数据并且awk被认为是不好的做法?最好的方法是使用Unix时间戳进行数学运算吗?

2 个答案:

答案 0 :(得分: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 st

真正奇怪的是,为什么在你的C ++课程中你不学习C ++?

答案 1 :(得分:1)

“最好”非常相对。

在现实世界中,您希望做一些清晰且可维护的事情,并且使用Unix时间戳可能会也可能不会,这取决于程序的更大背景。也许不同的系统正在消耗不想了解Unix时间戳的结果。

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

(删除了关于你问题含糊不清的说明。)