sh/bash/dash/ksh/zsh等Shell脚本
-
centerpoint
- 帖子: 95
- 注册时间: 2009-11-30 19:38
#1
帖子
由 centerpoint » 2011-09-12 11:02
代码: 全选
用grep 查询"23:23:15.039330"这个字符串.这个字符串在文件的后半部分.
# time grep 23:23:15.039330 tcpdump_log.txt
2011-08-30 23:23:15.039330 IP 218.61.0.144.19991
real 0m0.846s
user 0m0.627s
sys 0m0.219s
文件大小:
#ls -sh tcpdump_log.txt
747M tcpdump_log.txt
但是我感觉0.8秒连文件也读不完啊
代码: 全选
确实连文件也读不完:
# time cat tcpdump_log_2011-09_1.txt > /dev/null
real 0m7.197s
user 0m0.019s
sys 0m0.408s
# ls -sh tcpdump_log_2011-09_1.txt
642M tcpdump_log_2011-09_1.txt
# tail -n 1 tcpdump_log_2011-09_1.txt
2011-09-12 16:23:58.960353 IP 111.174.44.10.nfa > .cp-cluster: P 3818663732:3818663764(32) ack 349885517 win 63880
# time grep 16:23:58.960353 tcpdump_log_2011-09_1.txt
2011-09-12 16:23:58.960353 IP 111.174.44.10.nfa > .cp-cluster: P 3818663732:3818663764(32) ack 349885517 win 63880
real 0m0.830s
user 0m0.509s
sys 0m0.318s
#
看到没? grep虽快,但是硬盘速度有限制啊, cat 读完642M的文件要7秒.grep居然0.8秒就查询完毕.
因为grep是必须读完全部文件才能对比匹配所有行的所有字符串.
为嘛?
-
我就是我2
- 帖子: 1215
- 注册时间: 2008-12-13 10:55
- 来自: the Earth
-
联系:
#2
帖子
由 我就是我2 » 2011-09-12 11:04
centerpoint 写了:代码: 全选
用grep 查询"23:23:15.039330"这个字符串.这个字符串在文件的后半部分.
# time grep 23:23:15.039330 tcpdump_log.txt
2011-08-30 23:23:15.039330 IP 218.61.0.144.19991
real 0m0.846s
user 0m0.627s
sys 0m0.219s
文件大小:
#ls -sh tcpdump_log.txt
747M tcpdump_log.txt
高和低是一对概念。grep和谁比才显示出它的高呢?

-
xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
#3
帖子
由 xhy » 2011-09-12 11:11
纯内存操作不到1GB的数据,而且还没有正则,当然花不了多少时间.
目前负债150多万
-
tusooa
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
-
联系:
#4
帖子
由 tusooa » 2011-09-12 12:11
你拿time cat比较下。
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#5
帖子
由 eexpress » 2011-09-12 16:11
0.8秒连文件也读不完
你啥思维。
0.01秒,cairo都可以渲染整个屏幕100次了。
● 鸣学
-
sk1418
- 帖子: 229
- 注册时间: 2007-07-01 17:36
- 系统: (En):System
- 来自: (En):address
-
联系:
#6
帖子
由 sk1418 » 2011-09-12 16:46
ack不是号称比grep快,应尬把所有用grep 的换成ack么。 LZ试试,ack有多快被。
---
regards,
Kent
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#9
帖子
由 lilydjwg » 2011-09-26 16:27
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#10
帖子
由 fnan » 2011-10-10 8:09
#a.txt是个五十万行的文件。
kose5@kose5-Aspire-4552:~$ time sed -n '/[0-9][a-z][0-9]/p' a.txt|wc -l
43155
real 0m1.158s
user 0m1.110s
sys 0m0.070s
kose5@kose5-Aspire-4552:~$ time perl -ne 'if (/\d[a-z]\d/) {print}' a.txt|wc -l
43155
real 0m0.537s
user 0m0.540s
sys 0m0.020s
kose5@kose5-Aspire-4552:~$ time grep -c '[0-9][a-z][0-9]' a.txt
79278 (汗,不仅慢,还是错误的)
real 1m8.299s
user 1m8.170s
sys 0m0.020s
kose5@kose5-Aspire-4552:~$ time grep -Pc '[0-9][a-z][0-9]' a.txt
43155 (perl正则。。。没话说)
real 0m0.301s
user 0m0.280s
sys 0m0.010s
kose5@kose5-Aspire-4552:~$ time awk '$0~/[0-9][a-z][0-9]/ {print}' a.txt|wc -l
43155
real 0m0.224s (awk的速度!!!!!)
user 0m0.230s
sys 0m0.020s
kose5@kose5-Aspire-4552:~$
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#11
帖子
由 lilydjwg » 2011-10-10 12:12
fnan 写了:#a.txt是个五十万行的文件。
[...]
kose5@kose5-Aspire-4552:~$ time grep -c '[0-9][a-z][0-9]' a.txt
79278 (汗,不仅慢,还是错误的)
real 1m8.299s
user 1m8.170s
sys 0m0.020s
[...]
你用了 -c,所以 grep 的优化策略不起作用了。至于为什么结果不对,我也很想知道。
-
nmsfan
- 帖子: 18958
- 注册时间: 2009-10-16 22:46
- 来自: finland
#12
帖子
由 nmsfan » 2011-10-10 12:23
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#13
帖子
由 fnan » 2011-10-10 20:11
kose5@kose5-Aspire-4552:~$ time grep '[0-9][a-z][0-9]' a.txt|wc -l
79278
real 1m13.000s
user 1m12.900s
sys 0m0.080s
kose5@kose5-Aspire-4552:~$
# 结果一样(更糟?),其实-c所用时间非常少。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#14
帖子
由 fnan » 2011-10-10 20:15
lilydjwg 写了:fnan 写了:#a.txt是个五十万行的文件。
[...]
kose5@kose5-Aspire-4552:~$ time grep -c '[0-9][a-z][0-9]' a.txt
79278 (汗,不仅慢,还是错误的)
real 1m8.299s
user 1m8.170s
sys 0m0.020s
[...]
你用了 -c,所以 grep 的优化策略不起作用了。至于为什么结果不对,我也很想知道。
#不知道优化算法有没有经过严格测试?(这速度叫优化?)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#15
帖子
由 lilydjwg » 2011-10-10 20:34
fnan 写了:kose5@kose5-Aspire-4552:~$ time grep '[0-9][a-z][0-9]' a.txt|wc -l
79278
real 1m13.000s
user 1m12.900s
sys 0m0.080s
kose5@kose5-Aspire-4552:~$
# 结果一样(更糟?),其实-c所用时间非常少。
结果当然会更糟——少了个计数器,但要将匹配行输出,断行还是不能避免。也许那个优化算法只能对 -q 这种选项有效了。。。