分页: 2 / 2

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

发表于 : 2011-10-10 15:15
link_01
我来抛砖引玉,看看是不是要这种输出结果:

代码: 全选

sed -nr '/simple\/play\.jsp/s#.+\[(.+)\].+ChannelID=(.+)&loginName=(.+)&ip=(.+)\s+HTTP.+#\1,\2,\3,\4#p' 1.log
1.log就是LZ给出的数据片段

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

发表于 : 2011-10-10 20:04
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:~$

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

发表于 : 2011-10-11 12:21
wjjleopard
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只能一行一行的处理……

谢谢!

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

发表于 : 2011-10-11 17:07
Methuselar
这种事纯awk sed就能做了
无端增加读写当然慢...