什么是最快的egrep

时间:2014-06-19 17:05:31

标签: linux bash shell awk grep

我需要从200万行的大型csv文件中获取,我想将egrep时间减少到0.5秒,这有可能吗?不,我此时不想要数据库(sqlite3或MySQL)..

$ time wc foo.csv
2000000 22805420 334452932 foo.csv
real 0m3.396s
user 0m3.261s
sys 0m0.115s

我已经能够将运行时间从40秒减少到1.75秒

$ time egrep -i "storm|broadway|parkway center|chief financial" foo.csv|wc -l

108292

real    0m40.707s
user    0m40.137s
sys     0m0.309s

$ time LC_ALL=C egrep -i "storm|broadway|parkway center|chief financial" foo.csv|wc -l

108292

real    0m1.751s
user    0m1.590s
sys     0m0.140s

但我希望egrep实时不到半秒,任何技巧都会受到高度赞赏,文件会不断变化,所以我不能使用任何缓存机制......

1 个答案:

答案 0 :(得分:1)

如果您只是搜索关键字,可以使用fgrep(或grep -F)代替egrep

LC_ALL=C grep -F -i -e storm -e broadway -e "parkway center" -e "chief financial"

接下来要尝试的是-i,这可能是现在的瓶颈。例如,如果您确定只有第一个字母可以大写,那么您可以这样做:

LC_ALL=C grep -F \
   -e{S,s}torm -e{B,b}roadway -e{P,p}"arkway "{C,c}enter -e{C,c}"hief "{F,f}inancial