This question already has answers here:
Fastest possible grep
(12个答案)
我需要从一个有200万行的大型csv文件中退出,我想将退出时间缩短到0.5秒,这有可能吗?不,我现在不需要数据库(sqlite3或mysql)。
我已经把运行时间从40秒缩短到了1.75秒
但我希望egrep的实时性不到半秒,任何技巧都会得到极大的赏识,文件不断变化,所以我不能使用任何缓存机制…
接下来要尝试的是将
(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