【发布时间】:2014-06-20 01:38:38
【问题描述】:
我需要从一个包含 200 万行的大型 csv 文件中进行 egrep,我想将 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实时小于半秒,任何技巧将不胜感激,文件不断变化,所以我不能使用任何缓存机制......
【问题讨论】:
-
grep 的运行速度可能比您的磁盘系统吐出数据的速度要快。如果您想要更快的结果,那么请使用更快的磁盘。
-
马克,unix内核会缓存,不是磁盘问题
-
wc foo.csv在您的系统上运行了多少时间?请加time wc foo.csv。 -
“文件不断变化”。那么它就不会被缓存。
-
$ time wc foo.csv 2000000 22805420 334452932 foo.csv real 0m3.396s user 0m3.261s sys 0m0.115s