我不断学习新工具,甚至是老式工具,因为我喜欢使用正确的解决方案解决问题.
不过,我想知道是否还有任何理由去学习其中的一些.awk
例如是对我有意思,但对于简单的文本处理,我可以使用grep
,cut
,sed
等而复杂的,我会去为Python.
现在我并不是说它不是一个强大而方便的工具.但是,由于学习新工具需要时间和精力,值得吗?
如果你快速学习awk的基础知识,你确实可以在命令行上做出惊人的事情.
但学习awk 的真正原因是有借口阅读其作者Aho,Kernighan和Weinberger 的精湛书籍AWK编程语言.你会从名字中想到它只是教你awk.实际上,这只是一个开始.一旦使用简单的脚本语言使字符串操作变得容易 - 并且awk是第一个 - 它继续教导读者如何实现数据库,解析器和解释器,就可以解决大量可以解决的问题和(如果内存为我提供)一个小型项目特定计算机语言的编译器!如果他们还使用awk编写了一个示例操作系统,这本书将是一个相当完整的计算机科学调查介绍!
与原版C语言书籍一样简洁明了,它也是友好技术写作的一个很好的例子.即使是指数也是一种工艺.
AWK?如果你知道它,你偶尔会在命令行使用它,但是对于任何更大的东西你都会感到困惑,无法访问系统和互联网的更广泛的功能,就像Python提供的访问权限.但这本书?你总是很高兴看到它!
我认为这取决于你发现自己的环境.如果你是一个*nix人,那么知道awk
是一件好事.几乎每个*nix上都可以找到唯一的其他脚本环境sh
.因此,虽然grep
,sed,
等一定能够代替awk
对现代主流linux
发行版,当你移动到更奇特的系统,知道一点awk
将是真正的得心应手.
awk
也可以用于不仅仅是文本处理.例如,我的一位主管写了天文学代码awk
- 这就是他完全老了,真是太棒了.在他那个时代,它是这项工作的最佳工具......现在即使他的学生喜欢我使用python而不是什么,他坚持他所知道的并且运作良好.
最后,世界各地都有很多旧代码,知道一点点awk
不会受到伤害.它也会让你更好*nix人:-)
我使用的唯一原因awk
是自动拆分:
awk '{print $3}' < file.in
这将打印出第三个以空格分隔的字段file.in
.它比以下更容易:
tr -s ' ' < file.in | cut -d' ' -f3
我认为如果你的文件包含列/字段, awk很棒.我在处理/分析多列文件中的特定列时使用它.或者,如果我想添加/删除特定列.
例如
awk -F \t '{ if ($2 > $3) print; }'
仅当选项卡分隔文件中的第2列值大于第3列值时才会打印.
当然我可以使用Perl或Python,但awk使用简洁的单行命令使其变得简单得多.
学习awk也是相当低廉的成本.您可以在不到一个小时的时间内学习awk基础知识,因此学习任何其他编程/脚本语言的努力都不多.
偶尔使用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.
即使没有实际需要,如果你已经知道正则表达式,那么拿起基础知识也不会花费很长时间,看看事情的设计是很有趣的.它相当优雅.
推荐阅读
如何解决《将SVG转换为PNG,将应用的图像作为svg元素的背景》经验,为你挑选了1个好方法。 ... [详细] 如何解决《mmap系统调用中MAP_ANONYMOUS标志的用途是什么?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《当我尝试对列表进行排序时,我得到一个错误'dict'对象没有属性》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在Windows10UWP应用程序中播放(MIDI)声音?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《要字符串的字符串列表》经验,为你挑选了1个好方法。 ... [详细] 如何解决《JUnitassertEquals失败》经验,为你挑选了1个好方法。 ... [详细] 如何解决《在spark中访问嵌套数据》经验,为你挑选了1个好方法。 ... [详细] 如何解决《删除&害羞;元素中的(软连字符)实体》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何多次选择相同的输入[selectize.js]?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《RecyclerView滚动到smoothScrollToPosition(0)后结束》经验,为你挑选了0个好方法。 ... [详细] 如何解决《父控制器上的调用方法?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何从锚链接中删除click事件?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《C#等效的PHPhttp_build_query》经验,为你挑选了1个好方法。 ... [详细] 如何解决《MVCDropDownListOnChange更新其他表单字段》经验,为你挑选了1个好方法。 ... [详细] 如何解决《将背景过滤器应用于svgpath元素》经验,为你挑选了1个好方法。 ... [详细] 如何解决《ggplot2:更改条形图中每个构面的颜色》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Golang:如何在Linux上使用syscall.Syscall?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何从djangorest框架的基于函数的视图中分页响应?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《解析JSON响应的最简单方法》经验,为你挑选了3个好方法。 ... [详细] 如何解决《GoogleFeedsAPI无法正常工作-是否已关闭?》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1无法创建solr核心
- 2Java-如何对TimSort和“违反常规合同”进行单元测试
- 3选择具有容器的div的第一个子项
- 4C - 从特定存储器地址读取值
- 5使用Geofire + Firebase过滤结果
- 6django模板不呈现
- 7Laravel 5.1/AngularJS:在Angular视图中重置密码(如何验证CSRF令牌?)
- 8无法使用"IN"列表形成正确的Linq查询
- 9scala在Option Class中重新分配给val
- 10<>(尖括号)对swift中的类名做了什么?
- 11如何将过滤器添加到datagridview
- 12无法删除leafgarland-vim TypeScript experimentalDecorator警告
- 13Microsoft是否使用ODBC退出,折扣或弃用SSIS OLEDB提供程序?
- 14调度计时器不起作用
- 15在data.table中找到匹配的行索引(我可以二进制搜索吗?)
- 16在没有窗口/ GUI的情况下运行Pygame
- 17clojure:没有利弊细胞
- 18为什么我不能从Java中的专用枚举值访问静态最终成员
- 19获取已经加载的DLL的版本(Windows API)
- 20行绑定Julia数据帧
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有