我一直在学习新的工具,甚至是老式的工具,因为我喜欢为问题使用正确的解决方案。
尽管如此,我想知道是否仍然有任何理由学习其中的一些。awk
例如是对我有意思,但对于简单的文本处理,我可以使用grep
,cut
,sed
等而复杂的,我会去为Python。
现在,我并不是说这不是一个强大而便捷的工具。但是由于学习新工具需要时间和精力,是否值得?
我一直在学习新的工具,甚至是老式的工具,因为我喜欢为问题使用正确的解决方案。
尽管如此,我想知道是否仍然有任何理由学习其中的一些。awk
例如是对我有意思,但对于简单的文本处理,我可以使用grep
,cut
,sed
等而复杂的,我会去为Python。
现在,我并不是说这不是一个强大而便捷的工具。但是由于学习新工具需要时间和精力,是否值得?
Answers:
我认为这取决于您所处的环境。如果您是* nix人,那么知道awk
是一件好事。几乎每个* nix上都可以找到的唯一其他脚本环境是sh
。因此,虽然grep
,sed,
等一定能够代替awk
对现代主流linux
发行版,当你移动到更奇特的系统,知道一点点awk
将是真正的得心应手。
awk
不仅可以用于文本处理,还可以用于其他用途。例如,我的一位主管在其中编写天文学代码,awk
这就是他的学历和成就。早在他的时代,它是工作的最佳工具……现在,即使像我这样的学生使用python,但不使用python,他仍然坚持自己所知道的并且运作良好。
最后,世界各地有许多旧代码在起作用,只要知道一点点awk
就不会受到伤害。它也会使你变得更好*尼克斯人:-)
如果您快速学习了awk的基础知识,那么您确实可以在命令行上做一些很棒的事情。
但是学习awk 的真正原因是有借口阅读其作者Aho,Kernighan和Weinberger撰写的极好的书籍《 AWK编程语言》。从名称上,您会认为它只是教给您awk。实际上,这仅仅是开始。一旦使用了简洁的脚本语言就可以解决各种各样的问题,而这种脚本语言使字符串操作变得容易(而awk是最早的语言之一),它可以教读者如何实现数据库,解析器,解释器。 ,以及(如果有内存的话)一个针对特定项目的小型计算机语言的编译器!如果仅他们还使用awk编写了示例操作系统的书,那本书将是对计算机科学的相当完整的介绍!
像原始的C语言书一样,它清晰,简洁而著名,它也是正确完成友好技术写作的一个很好的例子。甚至索引也是一项技巧。
啊 如果知道的话,您偶尔会在命令行上使用它,但是对于更大的东西,您会感到被困,无法访问系统的广泛功能以及类似Python所提供的Internet。但是那本书呢?您将永远很高兴阅读它!
我使用的唯一原因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尚未读取文件吗?
awk
:/
我认为awk非常棒,如果您的文件包含column / fields。我在处理/分析多列文件中的特定列时使用它。或者,如果我想添加/删除特定的列。
例如
awk -F \t '{ if ($2 > $3) print; }' <filename>
仅当制表符分隔文件中的第二列值大于第三列值时,才会打印。
当然,我可以使用Perl或Python,但是awk通过简洁的单行命令使其变得更加简单。
学习awk也是很便宜的。您可以在不到一个小时的时间内学习awk的基础知识,因此它不像学习任何其他编程/脚本语言那样费劲。
我偶尔使用AWK来处理HTML。例如,此代码将表转换为csv文件:
BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }
如果您要抓取屏幕,那就太好了。实际上,我可能喜欢AWK,因为它可以让我如此迅速地为问题建立错误的解决方案:) 更多示例。乔恩·本特利(Jon Bentley)的《Programming Pearls》也提到了这一点。
提出这个问题6年后,我现在可以确定地回答:不,学习awk不值得。
基本任务很容易处理,但基本的bash命令甚至GUI工具都很容易。使用现代动态语言,例如Python(常用或我的)或Ruby,可以轻松解决更复杂的任务。
您应该明确学习一种现代脚本动态语言,因为它可以帮助您完成许多任务(Web,管理,数据处理,自动化等)。通过这样做,完全无法使用诸如awk之类的工具,它每月最多可以为您节省几秒钟。
当然:我正在一个唯一可用的语言环境中工作:(一些生成COBOL,OMG,OMG的肮脏语言),bash(旧版本),perl(我还不掌握),sed,awk ,以及其他一些命令行实用程序。知道为awk
我节省了几个小时(并从我的同事那里产生了一些文本处理任务-他们每天至少来找我3次)。
我会说这可能不再值得了。我不时使用它作为比sed具有更多搜索功能的通用流编辑器,但是如果您精通python,我不知道您可以更快完成此任务以补偿所需时间的任务。学习awk。
以下命令可能是我最近两年使用过awk的唯一命令(它从Debian / Ubuntu系统中清除了一半删除的软件包):
$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P
awk
是Powertool的一种语言,因此,awk
如果您是任何IT专业人员,都可能会在某处使用它。如果你能处理的语法和正则表达式grep
和sed
那么你应该没有问题捡awk
它可能是值得的。
我发现awk
真正的亮点在于简化诸如处理多行记录以及同时处理/插入多个文件之类的事情。