e-s*_*tis 103 awk text-processing
我不断学习新工具,甚至是老式工具,因为我喜欢使用正确的解决方案解决问题.
不过,我想知道是否还有任何理由去学习其中的一些.awk
例如是对我有意思,但对于简单的文本处理,我可以使用grep
,cut
,sed
等而复杂的,我会去为Python.
现在我并不是说它不是一个强大而方便的工具.但是,由于学习新工具需要时间和精力,值得吗?
Bra*_*des 97
如果你快速学习awk的基础知识,你确实可以在命令行上做出惊人的事情.
但学习awk 的真正原因是有借口阅读其作者Aho,Kernighan和Weinberger 的精湛书籍AWK编程语言.你会从名字中想到它只是教你awk.实际上,这只是一个开始.一旦使用简单的脚本语言使字符串操作变得容易 - 并且awk是第一个 - 它继续教导读者如何实现数据库,解析器和解释器,就可以解决大量可以解决的问题和(如果内存为我提供)一个小型项目特定计算机语言的编译器!如果他们还使用awk编写了一个示例操作系统,这本书将是一个相当完整的计算机科学调查介绍!
与原版C语言书籍一样简洁明了,它也是友好技术写作的一个很好的例子.即使是指数也是一种工艺.
AWK?如果你知道它,你偶尔会在命令行使用它,但是对于任何更大的东西你都会感到困惑,无法访问系统和互联网的更广泛的功能,就像Python提供的访问权限.但这本书?你总是很高兴看到它!
fre*_*ace 93
我认为这取决于你发现自己的环境.如果你是一个*nix人,那么知道awk
是一件好事.几乎每个*nix上都可以找到唯一的其他脚本环境sh
.因此,虽然grep
,sed,
等一定能够代替awk
对现代主流linux
发行版,当你移动到更奇特的系统,知道一点awk
将是真正的得心应手.
awk
也可以用于不仅仅是文本处理.例如,我的一位主管写了天文学代码awk
- 这就是他完全老了,真是太棒了.在他那个时代,它是这项工作的最佳工具......现在即使他的学生喜欢我使用python而不是什么,他坚持他所知道的并且运作良好.
最后,世界各地都有很多旧代码,知道一点点awk
不会受到伤害.它也会让你更好*nix人:-)
Gre*_*ill 29
我使用的唯一原因awk
是自动拆分:
awk '{print $3}' < file.in
Run Code Online (Sandbox Code Playgroud)
这将打印出第三个以空格分隔的字段file.in
.它比以下更容易:
tr -s ' ' < file.in | cut -d' ' -f3
Run Code Online (Sandbox Code Playgroud)
Nik*_*hil 24
我认为如果你的文件包含列/字段, awk很棒.我在处理/分析多列文件中的特定列时使用它.或者,如果我想添加/删除特定列.
例如
awk -F \t '{ if ($2 > $3) print; }' <filename>
Run Code Online (Sandbox Code Playgroud)
仅当选项卡分隔文件中的第2列值大于第3列值时才会打印.
当然我可以使用Perl或Python,但awk使用简洁的单行命令使其变得简单得多.
学习awk也是相当低廉的成本.您可以在不到一个小时的时间内学习awk基础知识,因此学习任何其他编程/脚本语言的努力都不多.
偶尔使用AWK来处理HTML.例如,此代码将表转换为csv文件:
BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }
Run Code Online (Sandbox Code Playgroud)
如果你是屏幕抓取哪个是好的.实际上,可能是我喜欢AWK的情况,因为它允许我如此迅速地为问题构建错误的解决方案:) 更多示例.在Jon Bentley可爱的编程珍珠中也提到过它.
在我上一份合同中,学习 AWK 对我来说是无价的,我在一个嵌入式 Linux 系统上工作,在该系统上既没有安装 Perl,也没有安装大多数其他脚本语言。
我经常使用awk.它非常适合在管道中间进行非常简单的文本重排; 它填补了一个非常狭窄的利基之间,根本不需要它,需要鞭打Perl/Python /无论如何.
我不建议你花很多时间在它上面,但是知道语法的基础知识可能会派上用场 - 至少足以让你在想要使用它时快速查阅手册.
问了这个问题6年后,我现在可以确定地回答:不,学习awk不值得。
基本任务很容易处理,但基本的bash命令甚至GUI工具都可以处理。使用现代动态语言(例如,Python(最喜欢的或我的)或Ruby)可以轻松解决更复杂的任务。
您应该明确学习一种现代脚本动态语言,因为它可以帮助您完成许多任务(Web,管理,数据处理,自动化等)。这样一来,学习诸如awk之类的工具是完全无用的,它将每月最多为您节省几秒钟。
大多数awk一个衬垫可以使用Perl一个衬垫实现 - 如果你选择进入Perl one liner心态.或者,只需使用Perl三个内衬:)
如果您正在维护由喜欢awk的人编写的shell脚本,那么很明显,您将需要学习awk.
即使没有实际需要,如果你已经知道正则表达式,那么拿起基础知识也不会花费很长时间,看看事情的设计是很有趣的.它相当优雅.
归档时间: |
|
查看次数: |
25037 次 |
最近记录: |