什么是最快的egrep

我需要从一个200万行的大型csv文件egrep,我想减lessegrep时间到0.5秒,这是可能的吗? 不,我不希望数据库(sqlite3或MySQL)在这个时候..

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

我已经能够将运行时间从40秒减less到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实时不到半秒钟,任何技巧将不胜感激,文件不断变化,所以我不能使用任何caching机制…

如果你只是搜索关键字,你可以使用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