我不断学习的新工具,即使是老人,因为我喜欢使用正确的解决方案的问题。

尽管如此,我想知道是否仍有任何理由要了解其中的一些。 awk 例如,是对我有意思,但是对简单的文字处理,我可以使用 grep, cut, sed, 等等。而对于复杂的,我会去蟒蛇。

现在我不是这个意思的它是不是一个强大的和方便的工具。但由于它需要时间和精力去学习一种新的工具, 它是值得的 ?

有帮助吗?

解决方案

我认为这取决于你所处的环境。如果你是一个* nix人,那么知道 awk 是一件好事。几乎每个* nix上唯一可以找到的其他脚本环境是 sh 。所以当 grep sed,等肯定会取代现代主流 linux 发行版上的 awk ,当你转移到更奇特的系统,知道一点 awk 将成为Real Handy。

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

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

其他提示

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

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

非常简洁明了,就像最初的C语言书一样,它也是友好技术写作的一个很好的例子。即使是指数也是一种工艺。

awk中?如果您知道它,您偶尔会在命令行中使用它,但是对于任何更大的东西,您都会感到被困,无法访问系统和Internet等更广泛的功能,而Python则可以访问。但这本书?你会一直很高兴看到它!

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

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

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

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

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

e.g。

awk -F \t '{ if ($2 > $3) print; }' <filename>
仅当选项卡分隔文件中的第2列值大于第3列值时,

才会打印。

当然我可以使用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可爱的编程珍珠中也提到过。

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

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

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

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

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

如果您已经知道并使用sed,那么您至少可以选择一些awk。他们可以通过管道输送一些相当强大的技巧。总是给观众留下深刻印象。

在提出这个问题6年后,我现在可以肯定地回答:不,学习awk是不值得的。

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

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

Computerworld最近与Alfred V. Aho(一个人)进行了面试。关于AWK的AWK的三个创造者之一。这是一个非常有趣的读物。所以也许你会在其中找到一些提示,为什么学习AWK是一个好主意。

在我上一份合作嵌入式Linux系统的合同中学习AWK对我来说非常宝贵,在该系统上既没有安装Perl也没有安装大多数其他脚本语言。

如果你不得不偶尔在shell脚本中解析数据或程序输出的日志文件,这很有用,因为在awk中很容易实现,这会让你在python中获得更多的代码行。

它当然拥有更多的力量,但这似乎是大多数人使用它的任务。

当然:我在一个只有可用语言的环境中工作:(一些生成COBOL,OMG,OMG的shity语言),bash(旧版本),perl(我还没掌握它), sed,awk和其他一些命令行实用程序。知道 awk 让我花了几个小时(并且已经从我的同事那里产生了几个文本处理任务 - 他们每天至少三次来找我)。

awk具有非常好的比率效用/难度,并且“简单awk”具有非常好的比率效用/难度。适用于所有Unix / Linux / MacOS(也可以安装在其他系统中)。

它是在黄金时代设计的,当时人们讨厌打字,所以脚本可以非常非常短而且写得快。我将尝试安装mawk,一个快速版本,据称它加速计算大约9次,awk / gawk相当慢,所以如果你想用它代替R等你可能想要mawk。

我说它可能不值得了。我不时使用它作为一个比搜索能力更多的多才多艺的流编辑器,但是如果你精通python我不知道你能够以更快的速度完成任务以弥补所需的时间学习awk。

以下命令可能是我在过去两年中使用过awk的唯一命令(它从我的Debian / Ubuntu系统中清除了一半已删除的软件包):

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P

不。

尽管它可能很有趣,但你可以使用其他更强大的工具(如Perl)来做awk可以做的所有事情。

花时间学习那些功能更强大的工具 - 并且只是顺便选择了一些awk。

我会说有。对于简单的东西,AWK在缺乏经验的系统管理员/开发人员上要比Python容易得多。你可以学习一点AWK并做很多事情,学习Python意味着学习一门全新的语言(是的,我知道AWK也是一种语言)。

Perl可能会做很多AWK可以做的事情,但是在这个时代提供了选择我会在这里选择Python。所以是的,你应该学习AWK。但也学习Python: - )

既然PERL被移植到几乎所有重要的平台上,我会说它不值得。它比sed和awk更加通用。至于自动分割,你可以在perl中这样做:

perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

编辑:您可能仍希望稍微熟悉awk,因为其他一些工具基于其基于模式的操作的理念(例如Solaris上的DTrace)。

我在区域工作,文件是列格式。所以awk对我来说非常有用,可以重新编写文件,这样不同的软件就可以协同工作。对于非IT行业,使用awk就足够完美了。现在一天,计算机速度不是问题,所以我可以结合awk&amp; unix将许多1个liners命令输入到“脚本”中。使用awk按字段和记录搜索,我用它来非常快速地检查文件数据,而不是“vi”。打开一个文件。我不得不说awk能力给我的工作带来了快乐,我能够帮助同事使用awk快速解决问题。令我惊讶的代码。

我最近试图可视化记录DOS攻击的网络pcap文件,其数量超过20Gbs。我需要时间戳和IP地址。在我的场景中, AWK one-liner工作得非常精彩且非常快。我特意使用 AWK 来清理提取的文件,从分组的时间范围内的IP地址中获取IP地址和总包数。我完全同意上面其他人写的内容。这取决于你的需求。

awk 是一种powertool语言,因此,如果您是任何类型的IT专业人员,您可能会在某处找到 awk 。如果你可以处理 grep sed 的语法和正则表达式,那么你应该没有问题选择 awk ,这可能是值得的。

我发现 awk 真正闪耀的是简化诸如处理多行记录和同时修改/插入多个文件之类的事情。

其中一个原因不要了解awk是,它没有非贪婪相匹配的经常表达方式。

我有一个awk代码现在我必须重写,只是因为我突然调试,没有这样的东西作为非贪婪的匹配项,在awk/呆子因此它不能正确执行一些regex.

这取决于您的队友和您的领导以及您正在处理的任务。

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
  }
}

我目前在python中做过一些编码。 但我仍然不太清楚它是否能够轻松地用于简单的一次性文件转换。

使用awk,我可以在unix命令行上快速开发一行代码,进行一些非常狡猾的转换。每次我使用awk时,我编写的代码都是一次性的,不超过几行。也许是“如果”陈述和“printf”声明在这里或那里一行。

我从未用awk编写过超过10行的代码。 几年前我看过一些这样的剧本。

但是任何需要多行代码的东西,我都会使用python。

我喜欢awk。它是与sed结合使用的非常强大的工具。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top