shell的效率有那么低吗?

sh/bash/dash/ksh/zsh等Shell脚本
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

Re: shell的效率有那么低吗?

#16

帖子 link_01 » 2011-10-10 15:15

我来抛砖引玉,看看是不是要这种输出结果:

代码: 全选

sed -nr '/simple\/play\.jsp/s#.+\[(.+)\].+ChannelID=(.+)&loginName=(.+)&ip=(.+)\s+HTTP.+#\1,\2,\3,\4#p' 1.log
1.log就是LZ给出的数据片段
上次由 link_01 在 2011-10-11 8:45,总共编辑 1 次。
笔记
-------------------------------------
http://blog.163.com/wqt_1101
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: shell的效率有那么低吗?

#17

帖子 fnan » 2011-10-10 20:04

#根据LZ的数据样本,结构是固定的,用简单匹配:
kose5@kose5-Aspire-4552:~$ time sed -nr 's#.*\[(.*)\].*=([^&]+).*=([^&]+).*=([^ ]+).*#\1,\2,\3,\4#p' log.txt
15/Sep/2011:22:53:02 +0800,1,48390800,114.228.5.230
15/Sep/2011:22:53:02 +0800,1,56538290,122.66.196.28
15/Sep/2011:22:53:04 +0800,9,49111797,113.52.4.167
15/Sep/2011:22:53:09 +0800,1,65738998,121.36.157.47
15/Sep/2011:22:53:09 +0800,8,66343666,131.128.129.219

real 0m0.015s
user 0m0.000s
sys 0m0.010s
kose5@kose5-Aspire-4552:~$ time sed -nr 's#.*\[(.*)\].*=([^&]+).*=([^&]+).*=([^ ]+).*#\1,\2,\3,\4#p' 1.log|wc -l #1.log已扩展为两万行。
10005

real 0m0.986s
user 0m0.980s
sys 0m0.010s
kose5@kose5-Aspire-4552:~$
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
wjjleopard
帖子: 27
注册时间: 2007-06-25 2:13

Re: shell的效率有那么低吗?

#18

帖子 wjjleopard » 2011-10-11 12:21

fnan 写了:#根据LZ的数据样本,结构是固定的,用简单匹配:
kose5@kose5-Aspire-4552:~$ time sed -nr 's#.*\[(.*)\].*=([^&]+).*=([^&]+).*=([^ ]+).*#\1,\2,\3,\4#p' log.txt
15/Sep/2011:22:53:02 +0800,1,48390800,114.228.5.230
15/Sep/2011:22:53:02 +0800,1,56538290,122.66.196.28
15/Sep/2011:22:53:04 +0800,9,49111797,113.52.4.167
15/Sep/2011:22:53:09 +0800,1,65738998,121.36.157.47
15/Sep/2011:22:53:09 +0800,8,66343666,131.128.129.219

real 0m0.015s
user 0m0.000s
sys 0m0.010s
kose5@kose5-Aspire-4552:~$ time sed -nr 's#.*\[(.*)\].*=([^&]+).*=([^&]+).*=([^ ]+).*#\1,\2,\3,\4#p' 1.log|wc -l #1.log已扩展为两万行。
10005

real 0m0.986s
user 0m0.980s
sys 0m0.010s
kose5@kose5-Aspire-4552:~$

好吧,果然是我写法有问题,一直以为sed只能一行一行的处理……

谢谢!
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: shell的效率有那么低吗?

#19

帖子 Methuselar » 2011-10-11 17:07

这种事纯awk sed就能做了
无端增加读写当然慢...
Mea Culpa!
回复