当前位置:  开发笔记 > 编程语言 > 正文

还有什么理由去学习AWK吗?

如何解决《还有什么理由去学习AWK吗?》经验,为你挑选了8个好方法。

我不断学习新工具,甚至是老式工具,因为我喜欢使用正确的解决方案解决问题.

不过,我想知道是否还有任何理由去学习其中的一些.awk例如是对我有意思,但对于简单的文本处理,我可以使用grep,cut,sed等而复杂的,我会去为Python.

现在我并不是说它不是一个强大而方便的工具.但是,由于学习新工具需要时间和精力,值得吗?



1> Brandon Rhod..:

如果你快速学习awk的基础知识,你确实可以在命令行上做出惊人的事情.

但学习awk 的真正原因是有借口阅读其作者Aho,Kernighan和Weinberger 的精湛书籍AWK编程语言.你会从名字中想到它只是教你awk.实际上,这只是一个开始.一旦使用简单的脚本语言使字符串操作变得容易 - 并且awk是第一个 - 它继续教导读者如何实现数据库,解析器和解释器,就可以解决大量可以解决的问题和(如果内存为我提供)一个小型项目特定计算机语言的编译器!如果他们还使用awk编写了一个示例操作系统,这本书将是一个相当完整的计算机科学调查介绍!

与原版C语言书籍一样简洁明了,它也是友好技术写作的一个很好的例子.即使是指数也是一种工艺.

AWK?如果你知道它,你偶尔会在命令行使用它,但是对于任何更大的东西你都会感到困惑,无法访问系统和互联网的更广泛的功能,就像Python提供的访问权限.但这本书?你总是很高兴看到它!


+1已售出.我打算订购这本书.我使用awk多年来作为一种快速而强大的单线程脚本语言.Awk是一个很棒的文件预处理器,否则会占用十几行代码.我无法计算我使用该表单的次数:awk'{print $ 1,$ 2}'
我现在正在读这本书,它激起了我对awk的热情,几乎成了痴迷.
另见优秀的[Gawk:Effective AWK Programming](http://www.gnu.org/software/gawk/manual/).
同意.它几乎无视这本书所包含的所有内容的紧凑程度.它涵盖了大多数当代书籍的1/10(?)长度.

2> freespace..:

我认为这取决于你发现自己的环境.如果你是一个*nix人,那么知道awk是一件好事.几乎每个*nix上都可以找到唯一的其他脚本环境sh.因此,虽然grep,sed,等一定能够代替awk对现代主流linux发行版,当你移动到更奇特的系统,知道一点awk将是真正的得心应手.

awk也可以用于不仅仅是文本处理.例如,我的一位主管写了天文学代码awk- 这就是他完全老了,真是太棒了.在他那个时代,它是这项工作的最佳工具......现在即使他的学生喜欢我使用python而不是什么,他坚持他所知道的并且运作良好.

最后,世界各地都有很多旧代码,知道一点点awk不会受到伤害.它也会让你更好*nix人:-)


++同意,awk确实是*nix工具集中最便携,最重要的一致工具之一.它在busybox上可靠地工作,例如,无法找到perl.
我不认为很多人将awk和windows的存在联系在同一个宇宙中.....:P
"它在任何环境中都是一样的" - 并不完全:在Windows下单引号必须用double替换,s和内部双精度必须被转义.(Windows是一种真实的环境,即使让自己暴露于雷德蒙德不安全的半完成的剧情,也会让你受到任何15岁俄罗斯人的摆布.)
仍将awk用于文本处理作业。我通常会以其他方式(ruby,python)启动脚本,最后为了简单和强大而回到awk。

3> Greg Hewgill..:

我使用的唯一原因awk是自动拆分:

awk '{print $3}' < file.in

这将打印出第三个以空格分隔的字段file.in.它比以下更容易:

tr -s ' ' < file.in | cut -d' ' -f3


为什么使用`awk'{print $ 3}'<file.in`而不是`awk'{print $ 3}'file.in`?作为参数传递时,awk尚未读取文件吗?

4> Nikhil..:

我认为如果你的文件包含列/字段, awk很棒.我在处理/分析多列文件中的特定列时使用它.或者,如果我想添加/删除特定列.

例如

awk -F \t '{ if ($2 > $3) print; }' 

仅当选项卡分隔文件中的第2列值大于第3列值时才会打印.

当然我可以使用Perl或Python,但awk使用简洁的单行命令使其变得简单得多.

学习awk也是相当低廉的成本.您可以在不到一个小时的时间内学习awk基础知识,因此学习任何其他编程/脚本语言的努力都不多.



5> Dave..:

偶尔使用AWK来处理HTML.例如,此代码将表转换为csv文件:

BEGIN {s=""; FS="n"}
/]*>/, ""); s=(s ", " $1);}
/

如果你是屏幕抓取哪个是好的.实际上,可能是我喜欢AWK的情况,因为它允许我如此迅速地为问题构建错误的解决方案:) 更多示例.在Jon Bentley可爱的编程珍珠中也提到过它.



6> Eevee..:

我经常使用awk.它非常适合在管道中间进行非常简单的文本重排; 它填补了一个非常狭窄的利基之间,根本不需要它,需要鞭打Perl/Python /无论如何.

我不建议你花很多时间在它上面,但是知道语法的基础知识可能会派上用场 - 至少足以让你在想要使用它时快速查阅手册.



7> e-satis..:

问了这个问题6年后,我现在可以确定地回答:不,学习awk不值得。

基本任务很容易处理,但基本的bash命令甚至GUI工具都可以处理。使用现代动态语言(例如,Python(最喜欢的或我的)或Ruby)可以轻松解决更复杂的任务。

您应该明确学习一种现代脚本动态语言,因为它可以帮助您完成许多任务(Web,管理,数据处理,自动化等)。这样一来,学习诸如awk之类的工具是完全无用的,它将每月最多为您节省几秒钟。



8> slim..:

大多数awk一个衬垫可以使用Perl一个衬垫实现 - 如果你选择进入Perl one liner心态.或者,只需使用Perl三个内衬:)

如果您正在维护由喜欢awk的人编写的shell脚本,那么很明显,您将需要学习awk.

即使没有实际需要,如果你已经知道正则表达式,那么拿起基础知识也不会花费很长时间,看看事情的设计是很有趣的.它相当优雅.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有