免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 47342 | 回复: 30
打印 上一主题 下一主题

再问 sed与awk两者相比较各自的优劣 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-17 10:07 |只看该作者 |倒序浏览
搜了一下,以前有人问过,但是回答的和我想问的不太一样。

我想知道的不是sed、awk语法上的区别而是它们在用途上的区别。

我刚开始学,感觉两者用处是一样的,而awk好像功能更强一些,然而sed肯定有它的长处,否则岂不是只学awk就行了?

哪位能说说sed比awk好的地方在哪?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2006-02-17 10:12 |只看该作者
我觉着,如果是按行操作,就统统都用 sed
如果是不仅按行,还要按列操作,就统统都用 awk

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2006-02-17 10:18 |只看该作者
比如文件

ab334cd-ccffafsdfbb006
bb00dg-xxxxxx80790
变成
cdab334-ccffafsdfb006b
dgbb00-xxxxx80790x

逻辑关系: -前的字符串由3 部分组成: 1字母2数字3字母,把它们重组为 312 三个部分
-后的字串中把结尾的数字串与它前面的一个字母对调

你用posix awk写个出来看看

论坛徽章:
0
4 [报告]
发表于 2006-02-17 10:50 |只看该作者
原帖由 flw 于 2006-2-17 10:12 发表
我觉着,如果是按行操作,就统统都用 sed
如果是不仅按行,还要按列操作,就统统都用 awk



和我理解一样。。hoho

论坛徽章:
0
5 [报告]
发表于 2006-02-17 10:54 |只看该作者
也就是说:
虽然两者都是处理文本的,但是
两者各有所长,有的功能用sed实现起来比较方便,另一些则用awk方便

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2006-02-17 11:10 |只看该作者
原帖由 jixunuli 于 2006-2-17 10:54 发表
也就是说:
虽然两者都是处理文本的,但是
两者各有所长,有的功能用sed实现起来比较方便,另一些则用awk方便

对,waker 版主举的就是一个例子。
他那个问题用 sed 很容易解决,但是用 awk 就比较费劲。

其实这也就是我学习 Perl 的原因,
shell 下工具众多,功能也互相重复,
最头疼的是,这些重复部分的语法还各不相同,(比如 grep awk sed 都有正则表达式匹配的功能,但是三者的正则表达式语法就不相同)
最最最头疼的是,每个工具还分 GNU 版和不是 GNU 版,之间的差别也很大,
最最最最最头疼的是,即使都是 GNU 版,那么版本号的细微差别也会带来很多差别。
但是,用 Perl 做这些事,统统都能办到,而且统统都不太复杂。

[ 本帖最后由 flw 于 2006-2-17 11:13 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-02-17 12:08 |只看该作者
普通的行处理任务用sed很好,因为命令很简洁。
awk最好的部分是它按“列”或“字段”处理的方式和“关联数组”,但awk对正则表达式支持的程度比sed要差些,例如sub/gsub中不能用\1, \2这样的向前引用。gsed中的gensub是可以的,但必须写成\\1, \\2。
perl应该说结合了sed/awk的优点,尤其是强大的正则表达式是我的最爱。^_^不过据说有的unix平台下缺省没有安装。
有时间的话都学学吧。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2006-02-17 12:14 |只看该作者
嗯,楼上的说的不错,
其实现在 Linux 基本上都是缺省安装的,
FreeBSD 缺省也安装,
小型机上估计 Perl 不多见(缺省情况下)

不过 Perl 还有一点优势,那就是 Windows 下有完美的支持,而 sed 和 awk 因为 windows 讨厌的“双引号问题”,因此工作起来都不是很爽,
不过写成脚本执行还是可以的。

sed/awk/grep 的好处在于,它们大多数都是单一文件的软件,因此在小系统上要比 Perl 好使,Perl 动辄数十M……

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-02-17 12:27 |只看该作者
在文本处理方面,perl相当于awk/sed/grep的一个高度概括

论坛徽章:
0
10 [报告]
发表于 2006-02-17 12:27 |只看该作者
听了楼上各位的讲解,我明白了。
我决定学:sed + python
简单任务用sed,复杂的用python。
前一阵子用了用python,感觉处理文本也挺方便的。它也是跨平台的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP