我是体面的bash脚本,我正在赶上正则expression式,以及一些sed用法。 学习awk仍然值得,所有的select都在那里。 意见?
不同的select存在,不是因为每个人都可以做同样的事情(虽然对于本地化的情况,或者像Perl这样的完整编程语言也是如此),而是因为他们可以做不同的事情。
sed并不是非常适合处理表格数据,使用纯粹的bash通常比想要的更痛苦。 awk对表格数据操作几乎是微不足道的,也可以用来写小规模的状态机。 花一些时间看堆栈溢出的各种awk解决scheme,了解它可以做些什么。
我一直使用awk,尽可能避免使用perl。 Perl想做太多,成为一个通用的语言,但不幸的是有一个可怕的和不可读的语法,恕我直言。 维护别人编写的perl脚本是一件痛苦的事情,而且在一段时间之后,对于我们自己的脚本来说也是如此。
另一方面,awk有一个有限但有意义的范围,并且可以很好地工作。 它与shell脚本的接口也相当好,不像perl。
至于bash是一个幸存者,如果你问我,我更喜欢ksh93。
我不会把Perl称为“垂死”,不pipe其他意见如何
既然你做了Awk和Perl比较,你可能会对看Minimal Perl这本书感兴趣。 它显示了Perl如何与各种Unix / Linux命令行工具进行比较。 它应该为您提供足够的信息,使您能够更加明智地决定要学什么,而不pipe您select什么。
就我个人而言,我认为比Awk有更好的select,只有当它显然是我手头任务的最佳select时才会学到它。 但是再一次,我可以对很多事情说同样的话。
我仍然偶尔使用awk – 尽pipe我更经常使用Perl。 如果你不想学习Perl,因为你认为它正在死亡(我不同意的观点,但你有权利看你的观点),然后考虑Python。 对于列数据的纯文本处理,awk非常好。 对于更一般的工作,Perl或Python是优秀的。 之后,你正在进入重型系统编程,也许是C或C ++(或Go,或…)。
Bash是一个非常强大的shell。 Perl仍然可以做Bash不能做的事情。 我仍然需要编写能够运行其他shell的代码,所以我必须小心使用Bashfunction集中的内容。 彻底了解它会很好 – 但其他工具也有它们的位置。
所以,如果你有足够的时间学习awk,或者对于你来说很容易,因为你已经熟练使用了组件(扩展的正则expression式,类C语法),那么它是一个偶尔有用的工具提供给你。 不过,您可能更喜欢学习Perl或Python。
这取决于你的舒适程度。
我通过perl来到shell,所以我很乐意使用perl来处理复杂的事情。
然而,我发现,我这样做的时间越长,我想在shell单行程中做更多更复杂的事情,而不是处理“正确的”perl脚本的开销。 我觉得awk是做复杂事情的宝贵工具。
即使对于你来说弄清楚这个特定的工具不适合你做事的方式,也从不会感到痛苦。