免费注册 查看新帖 |

Chinaunix

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

perl为什么会比awk慢?(已解决) [复制链接]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-23 10:24 |只看该作者 |倒序浏览
一个很简单的文本处理:
每条记录都是以||分割的,判断它的第9个域是“ 0300530002 ”,就输出到一个新的文件。
写了个脚本,测试perl和awk的速度:
#!/bin/sh
echo "perl start"
echo $(date "+%F %T")
perl -F'\|\|' -ane 'print if $F[8] == " 0300530002 "' file1 > tmp1
echo "perl end"
echo $(date "+%F %T")

echo "awk start"
echo $(date "+%F %T")
awk -F'\\|\\|' '$9==" 0300530002 "' file1 > tmp2
echo "awk end"
echo $(date "+%F %T")

结果如下:
perl start
2008-01-22 18:57:07
perl end
2008-01-22 19:33:40
awk start
2008-01-22 19:33:40
awk end
2008-01-22 19:51:40

整整慢了一倍,为什么会这样呢?

[ 本帖最后由 ly5066113 于 2008-1-24 11:25 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-01-23 11:02 |只看该作者
慢很正常。
另外,你可以把 == 改成 eq 试一下。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2008-01-23 11:05 |只看该作者
还有啊,你把两个语句反过来执行一下,先执行 awk,再执行 perl 试试。

顺便说一句,测试时间应该用 time 命令,更好一些。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2008-01-23 11:18 |只看该作者
好的,我试试。
因为文本处理是perl的强项,所以我一直认为perl会快一点,至少也不会比awk慢。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
5 [报告]
发表于 2008-01-23 12:19 |只看该作者
#!/bin/sh
time awk -F'\\|\\|' '$9==" 0300530002 "' file1 > tmp1
time perl -F'\|\|' -ane 'print if $F[8] eq " 0300530002 "' file1 > tmp2

real    17m49.99s
user    16m35.93s
sys     1m3.58s

real    35m48.98s
user    34m32.96s
sys     1m4.18s

为什么还是这样呢?慢了整整一倍。

论坛徽章:
0
6 [报告]
发表于 2008-01-23 12:29 |只看该作者
原帖由 ly5066113 于 2008-1-23 11:18 发表
好的,我试试。
因为文本处理是perl的强项,所以我一直认为perl会快一点,至少也不会比awk慢。


awk是C编译好的, 而perl....

"强大" ne "快"

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2008-01-23 13:03 |只看该作者
用perlcc 编译一下..会更快一点...

但是这样比好像没有什麽意思....

要更快..请用C..谢谢..

论坛徽章:
0
8 [报告]
发表于 2008-01-23 13:08 |只看该作者
个人觉得,考虑到速度的话,如果能用awk完成的,尽量用awk。 觉得awk毕竟是直接调用内部命令,而perl需要interpreter 转一下。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
9 [报告]
发表于 2008-01-23 13:30 |只看该作者
上面的测试是用15G左右的文件测试的。

我又用10G左右的文件测试了一下:
real    12m10.79s
user    11m3.70s
sys     0m53.69s

real    25m1.80s
user    23m57.77s
sys     0m54.26s

还是2倍的关系。
每次都正好慢一倍,我感觉应该是哪里有些问题。
貌似运行awk命令的时候,有2个CPU在忙,而运行perl的时候,只有1个CPU在忙。
我的环境是AIX 5.3,perl是5.8.2。
我有没有什么办法,在运行perl的时候让它多用点资源呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2008-01-23 13:54 |只看该作者
原帖由 ly5066113 于 2008-1-23 13:30 发表
上面的测试是用15G左右的文件测试的。

我又用10G左右的文件测试了一下:
real    12m10.79s
user    11m3.70s
sys     0m53.69s

real    25m1.80s
user    23m57.77s
sys     0m54.26s

还是2倍的 ...

你有没有按照我说的测试一下?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP