还有什么理由学习AWK吗?
我不断学习新的工具,甚至是老式的工具,因为我喜欢用正确的方法解决问题 然而,我不知道是否还有任何理由去学习其中的一些<例如,code>awk对我来说很有趣,但对于简单的文本处理,我可以使用还有什么理由学习AWK吗?,awk,text-processing,Awk,Text Processing,我不断学习新的工具,甚至是老式的工具,因为我喜欢用正确的方法解决问题 然而,我不知道是否还有任何理由去学习其中的一些awk对我来说很有趣,但对于简单的文本处理,我可以使用grep、cut、sed,等等。而对于复杂的文本处理,我会选择Python 现在我不是说它不是一个强大和方便的工具。但是因为学习一个新工具需要时间和精力,值得吗?我确实经常使用awk。这对于在管道中间非常简单的文本改组是有好处的;它填补了一个非常狭窄的位置,介于根本不需要它和需要推出Perl/Python/任何东西之间 我不建议
grep
、cut
、sed
,等等。而对于复杂的文本处理,我会选择Python
现在我不是说它不是一个强大和方便的工具。但是因为学习一个新工具需要时间和精力,值得吗?我确实经常使用awk。这对于在管道中间非常简单的文本改组是有好处的;它填补了一个非常狭窄的位置,介于根本不需要它和需要推出Perl/Python/任何东西之间
我不建议你花很多时间在它上面,但是了解语法的基本知识可能会很有用——至少你可以在你想使用它的时候快速查阅手册。我使用
awk
的唯一原因是自动拆分:
awk '{print $3}' < file.in
我想说这可能不再值得了。我经常使用它作为一个比sed更通用的流编辑器,包括搜索功能,但是如果你精通python,我不知道有哪项任务可以更快地完成,以弥补学习awk所需的时间 下面的命令可能是我在过去两年中使用awk的唯一命令(它从我的Debian/Ubuntu系统中清除了一半已删除的软件包): 没有 尽管这可能很有趣,但您可以使用其他更强大的工具(如Perl)来完成awk所能做的一切
花点时间学习那些更强大的工具,只是顺便学点awk。我认为这取决于你所处的环境。如果你是一个*nix人,那么了解
awk
是一件好事。几乎在每个*nix上都可以找到的唯一其他脚本环境是sh
。因此,虽然grep
,sed,
etc肯定可以取代现代主流linux
发行版上的awk
,但当您转向更奇特的系统时,了解一点awk
将非常方便
awk
还可用于不仅仅是文本处理。例如,我的一位主管在awk
中编写了天文学代码——这就是他是多么的老派和令人敬畏。在他那个时代,这是最好的工作工具。。。现在,即使他的学生像我一样使用python什么的,他还是坚持他所知道的,并且工作得很好
最后,世界上有很多老代码,知道一点
awk
不会有什么坏处。它也会让你变得更好*nix person:-)如果你已经知道并使用sed,那么你最好至少学一点awk。它们可以通过管道连接在一起,实现一些非常强大的技巧。总是给观众留下深刻印象。在编写shell脚本时,如果您不得不偶尔解析日志文件以获取程序的数据或输出,那么这将非常有用,因为在awk中很容易实现,这将占用python中更多的代码行
它当然有更强大的功能,但这似乎是大多数人使用它的任务。我认为如果您的文件包含列/字段,awk非常好。我在处理/分析多列文件中的特定列时使用它。或者如果我想添加/删除特定列 e、 g
awk-F\t'{if($2>$3)print;}'
仅当制表符分隔文件中的第二列值大于第三列值时,才会打印
当然,我可以使用Perl或Python,但是awk通过一个简洁的单行命令使它变得更加简单
学习awk的成本也很低。您可以在不到一个小时的时间内学习awk基础知识,因此与学习任何其他编程/脚本语言相比,学习awk基础知识的工作量要小得多。大多数awk一行程序都可以通过Perl一行程序实现—如果您选择Perl一行程序的思维方式。或者,只需使用Perl三行程序:) 如果您要维护由喜欢awk的人编写的shell脚本,那么显然,您需要学习awk
即使没有实际的需要,如果你已经知道regex,也不会花很长时间去学习基本知识,看看当时的设计是多么有趣。它相当优雅。当然:我工作的环境中,唯一可用的语言是:(一些生成COBOL、OMG、OMG的蹩脚语言)、bash(旧版本)、perl(我还不精通)、sed、awk和其他一些命令行实用程序。了解awk可以帮我节省几个小时(而且我的同事们也帮我完成了几个文本处理任务——他们每天至少来我这里三次) 计算机世界最近与Alfred V.Aho(AWK的三位创作者之一)就AWK进行了一次调查。这是一本很有趣的书。因此,也许您会在其中找到一些提示,为什么学习AWK是个好主意。既然PERL已经被移植到几乎所有重要的平台上,我认为这不值得。它比sed和awk结合在一起更通用。至于自动拆分,您可以在perl中这样做:
perl -F':' -ane 'print $F[3],"\n";' /etc/passwd
编辑:您可能仍然希望对awk有所了解,因为其他一些工具基于其基于模式的操作原理(例如Solaris上的DTrace)。我偶尔使用awk处理HTML。例如,此代码将表转换为csv文件:
BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }
BEGIN{s=”“;FS=“n”}
//, ""); s=(s“,”$1);}
/ 我得说有。对于简单的东西,对于缺乏经验的系统管理员/开发人员来说,AWK比Python容易得多。你可以学习一点AWK,做很多事情,学习Python意味着学习一种全新的语言(是的,我知道AWK也是一种语言,也是一种感觉)
Perl可能能够做AWK可以做的很多事情,但在这方面提供了选择
awk -F \t '{ if ($2 > $3) print; }' <filename>
perl -F':' -ane 'print $F[3],"\n";' /etc/passwd
BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }
if( team mates and leader ask to write awk ){
if( you can reject that){
if( awk code is very small){
learn little just like learn Regex
}else{
use python or even java
}
}else{
do as they ask
}
}