使用awk和bash解析人类可读的数据是否有害,是一种糟糕的做法 在C++类中,第一个模块是关于BASH编程的。我们的讲师经常混合使用shisms和bash以及csh兼容性isms,最近使用了一个使用awk和bash的示例来获得本月的最后一个星期五。他用bash脚本和awk解析cal

使用awk和bash解析人类可读的数据是否有害,是一种糟糕的做法 在C++类中,第一个模块是关于BASH编程的。我们的讲师经常混合使用shisms和bash以及csh兼容性isms,最近使用了一个使用awk和bash的示例来获得本月的最后一个星期五。他用bash脚本和awk解析cal,bash,parsing,unix,awk,Bash,Parsing,Unix,Awk,用bash和awk解析这些数据被认为是错误的做法吗?最好的方法应该是使用Unix时间戳进行计算吗?“best”是相对的 在现实世界中,您希望做一些清晰且可维护的事情,而使用Unix时间戳可能是,也可能不是,这取决于程序的更大上下文。可能是另一个系统正在使用不想了解Unix时间戳的结果 对于你的大学班级来说,重点是学习一些东西,所以“最好”是完全不同的东西。学校并不总是最快的解决方案;有时你会绕道去了解你所了解的风景。在这种情况下,使用bash和awk进行解析可能是最好的,因为它会让您接触bash

用bash和awk解析这些数据被认为是错误的做法吗?最好的方法应该是使用Unix时间戳进行计算吗?

“best”是相对的

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

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

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

“最佳”是非常相对的

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

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


(删除了关于问题模糊性的注释。)

我想说这是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++?< /p> < p>我会说这是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+++< /p >在大学里,你做的很多事情不是做最好的方法,而是解释一个概念,用一个简单的例子来解释这个概念。他在教你
awk
,所以他很自然地使用
awk
来解决手头的问题。awk是专门为解析人类可读数据而创建的。解析cal的输出是一件非常合理的事情。WRT“在我们的C++类中,第一个模块是关于BASH编程的”,除非整个模块是关于如何调用编译器的1段,否则您的类错了!嗯,这是一门课。它将教你如何制作工具、选择工具和使用工具。解析cal的不规则输出非常困难,因此在我看来,这将是一个很好的练习。在大学里,你所做的很多事情并不是用“最好”的方式来做,而是解释一个概念,并用一个简单的示例问题(用另一种方式可能更容易解决)来说明这个概念。他在教你
awk
,所以他很自然地使用
awk
来解决手头的问题。awk是专门为解析人类可读数据而创建的。解析cal的输出是一件非常合理的事情。WRT“在我们的C++类中,第一个模块是关于BASH编程的”,除非整个模块是关于如何调用编译器的1段,否则您的类错了!嗯,这是一门课。它将教你如何制作工具、选择工具和使用工具。解析CAL的不规则输出是很难的,所以这将是一个很好的摘录,IMO. <代码>为什么在C++类中你不学习C++?<代码>不能停止笑……:+)我想这是因为“第一个模块是关于bash编程的”(根据问题)。也许是为了对比CSH和C,突出编译器的能力。不,它是为了教人们如何通过在服务器中使用sshing来使用基本的linux。我的大多数同学以前都从未碰过一只猫。他们将发现他们的.CPP文件有很多麻烦,并且理解什么是“编译器标志”或“返回代码”。我可以看到人们可能需要与shell交互来编译和运行他们的C++程序,但这几乎不是学习shell编程的原因。我觉得C++的代码是“代码> > MaMeCuff< <代码> s,<代码> AcStudio。M4<代码>,<代码>配置< /C> >,不创建与BASH一起缝合的脚本。各自为政<代码>为什么你的C++类你不学习C++?< /代码>不能停止笑……:)我想这是因为“第一个模块是关于bash编程的”(根据问题)。或许可以将CSH与