我需要从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实时不到半秒,任何技巧都会受到高度赞赏,文件会不断变化,所以我不能使用任何缓存机制......
答案 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