This question already has answers here:

Fastest possible grep
(12个答案)
我需要从一个有200万行的大型csv文件中退出,我想将退出时间缩短到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的实时性不到半秒,任何技巧都会得到极大的赏识,文件不断变化,所以我不能使用任何缓存机制…

最佳答案

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

关于linux - 什么是最快的egrep ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24312383/

10-12 20:56