为什么老感觉 awk/sed 这一类工具很难用, 用起来很痛苦?
2016/12/7
问题
语法记不住
特殊变量记不住(NR之类的, 这让我想到了bash中的$# $@这一类的变量, 真的很难记住)
忘记得很快
其他...
实践得少还情有可原, 但是也用了有一段时间了, 老感觉用它们有点痛苦.
使用它们, 老让自己产生自我怀疑, 工具不应当是这样的
上下文环境
linux
gawk gsed
尝试解决
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
因为的确很难用,用起来的确很痛苦啊。
到现在我也只会一些简单的awk和sed用法。
我把awk当成高级版的cut来用了,偶尔用来算数字总和也还行,要用到NR之类的话,与其查表,不如正正经经写脚本语言。
sed就单纯用来取代字符了,什么pattern space hold space之类的,堪比brainfuck编程。
从一个方向想,就算是用起来这么痛苦的工具,用多了也自然就习惯了。
但从另一个方向想,就算是要写比较多字的Python / Ruby / Perl等语言,写多了也自然就快了。
那我干嘛不选后者呢……
写脚本的话awk哪里不好用了,sed的话基本没有什么需求了。建议题主看一下这本书
举一个刚刚别人的问题的例子,有一个变量 a='C1 AC_REG,C8 ARR_RUNW,C10 30FT_TO_TD,C4 TIME,C6 DEP_RUNW,C5 ORIGIN,C3 DATE,C7 DESTINATION,C2 FLIGHT_NUM' 他希望将所有的
C数字+空格
都去掉,剩下AC_REG,ARR_RUNW,30FT_TO_TD,TIME,DEP_RUNW,ORIGIN,DATE,DESTINATION,FLIGHT_NUM
。当然这问题用任何语言都能处理,也不复杂。但用awk和sed这类的工具意义就在于,它们能更快速的解决问题:
echo $a|sed -r 's/C[0-9]{1,2} //g'
至于说特殊变量或者命令记不住,其实最好的办法就是,简单的文本处理问题多多练习,试着从不同的角度去想解决办法。实践多了就都记住了。
sed 1974
awk 1977
perl 198?
他们都是文本处理工具(或语言),存在这么久自然有他的道理,首先语法并不复杂,只是你不熟悉。
为什么容易忘记,你不常用当然就会忘记。
变量名难记?如果你知道awk的record(行)和filed(列)概念,什么NR,NF这些应该就很好记了吧?
NUMBER OF RECORDS, NUMBER OF FIELDS
如果你的工作天天各种文本处理,你自然就会喜欢这些东西。
awk对于perl或者python这些语言当然没有什么优势,但是它简单啊,很多类unix系统都自带啊,perl和python并不敢说每个发行版都有吧?
另外他们存在这么长时间,有一个共识问题,有些问题大家自然而然就会想到awk该怎么解决。
so,以上给出一些不同的意见