Chinaunix首页 | 论坛 | 博客
  • 博客访问: 547488
  • 博文数量: 201
  • 博客积分: 7734
  • 博客等级: 少将
  • 技术积分: 1994
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-09 19:18
文章分类

全部博文(201)

文章存档

2011年(28)

2010年(173)

分类:

2010-06-18 10:08:03

匹配每行不等于10个字符的行:
awk 'length($0)!=10' file

egrep -v "^.{10}$" file

perl -lne 'print if length != 10' file

awk -F '' 'NF!=10' file

sed '/^.\{10\}$/d' file

awk '!/^..........$/' file

sed '/^..........$/d'file

SHELL只是一个接口,大部分的功能全靠外部程序来完成。
而Perl是一种语言,基本上什么事情都能做。


相比较而言,awk、sed就像死板手,而perl和python是个活板手。
awk和sed专注于文本处理,大部分情况效率要优于perl等。很简单,比如列文件,谁能有cat的效率高?
如果你是个懒惰的SA,那就用shell吧。如果是geek或者你的工作需要复杂的逻辑,并且还会出现许多无法预知的新要求,那就用perl等好了。

不信无所谓,说一千遍抵不上试一遍。
况且每种场合的需求也会有变化。
由于是项目中涉及的任务,具体的数据不便给出。

且在此瞎说一通,有问题,大家一起共勉。

在http请求的发送处理上:

在将文件输入的一行作为http get的参数完成访问并处理返回结果的场合中

gawk,在每一行的处理过程中一次性完成HTTP访问和响应处理。 70 req/s
shell,调用netcat发送HTTP后,用纯shell处理效率也很差。 20 req/s
perl ,在密集调用时,资源释放都来不及,有时候就调死在哪里了。 20 req/s
java,用sun的原生类包效率非常高的。 500 request/s
其他工具,如apache ab,220 request/s


gawk Network接口,可以在下面的章节中全面了解
O'Reilly.Effective.awk.Programming.3rd.Edition Section 14.
... P_002fIP-Networking


另外可以说说 一般如何去考虑提高执行效率的。

shell如何提高执行效率?

多用内部命令,少用外部命令。
批处理IO, 如涉及输入文件的,尽量一次性载入内存(如数组),或按批量输入缓冲区处理。
减少外部命令的涉及量。
多子进程并行处理。但需要考虑进程间如何进行相互协调和通知。

在千万行级的文本文件中,尤其是有非常多项,需要n多次搜索时,如何提高全文搜索执行效率?

在多项或逻辑的搜索中,搜索可以用批处理搜索来减少循环次数,从而大幅提高整体执行效率。
sed命令行,用脚本先组织好多项选择命令行。一般搜索内容,可以通过灵活指定几百个或的选项。
一次就能完成几百个单位的全文搜索。需要注意只有gnu sed才支持RE模式。或用egrep实现。

例如:
如果有10000个关键字需要搜索,难道要循环一万次搜索? 没到亿级那么多,1万~10万还是有的,在此更正。
可以一次搜索100个,只要搜一百次,一次搜500个,只要搜20次。
一次支持多少个关键字同时搜,每个工具可能不太一样。 sed 至少能支持 200个关键字。
egrep好像不太多。 以后可以在找机会试试极限情况。

如, egrep "123|456|789|...|135|246|" bigfile
sed -r "123|456|789|...|135|246|" bigfile


怎么随机生成4亿行小于等于10个字符的文件:

a=1
while [ $a -le 40 ];do
LENGTH=$((RANDOM%10+1))
b=1
while [ $b -le $LENGTH ];do
printf A
((b=$b+1))
done
printf "\n"
((a=$a+1))
done

=====================================

a=1
while [ $a -le 40 ];do
LENGTH=$((RANDOM%10+1))
b=1
while [ $b -le $LENGTH ];do
ASCII=$((RANDOM%95+32))
perl -le "printf chr($ASCII)"
((b=$b+1))
done
printf "\n"
((a=$a+1))
done

阅读(698) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~