Linux 最快的白鹭是什么
我需要从一个有200万行的大型csv文件中导出,我想将导出时间缩短到0.5秒,这有可能吗?不,我现在不需要数据库(sqlite3或MySQL)Linux 最快的白鹭是什么,linux,bash,shell,awk,grep,Linux,Bash,Shell,Awk,Grep,我需要从一个有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 financi
$ 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
grep的运行速度可能比磁盘系统吐出数据的速度还要快。如果您想要更快的结果,那么就获得更快的磁盘。Marc,unix内核将缓存它,而不是磁盘问题在您的系统上运行多长时间?请添加
time wc foo.csv
“文件持续更改”。然后它不会被缓存。$time wc foo.csv 2000000 22805420 334452932 foo.csv real 0m3.396s用户0m3.261s sys 0m0.115srici,太棒了!我在3次尝试中将平均时间缩短到1秒,再缩短0.5秒@辛迪:酷。好吧,我有另一个想法,但我不知道这会有多大的不同。编辑的答案。rici:-我必须在那里rici:不管怎样,没有-i,保存0.1second@CindyTurlington:10%是10%:)如果您不希望该文件包含“paRKwaY ceNteR”,那么它可能是值得的。除此之外,我认为您唯一的选择是并行,但这很棘手,因为您无法事先知道在哪里拆分文件。