码工码农,帮忙了!# PhotoGear - 摄影器材G*Y2012-08-24 07:081 楼技术帖。一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501,000行)能在几秒钟内完成吗?看似应该不难。linux下面。
o*p2012-08-24 07:082 楼现在不是8086的年代了啊。501【在 G**Y 的大作中提到】: 技术帖。: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501: ,000行)能在几秒钟内完成吗?看似应该不难。: linux下面。
c*e2012-08-24 07:083 楼sed501【在 G**Y 的大作中提到】: 技术帖。: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501: ,000行)能在几秒钟内完成吗?看似应该不难。: linux下面。
x52012-08-24 07:084 楼先发包子501【在 G**Y 的大作中提到】: 技术帖。: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501: ,000行)能在几秒钟内完成吗?看似应该不难。: linux下面。
s*e2012-08-24 07:086 楼head -501000 file |tail -1000501【在 G**Y 的大作中提到】: 技术帖。: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501: ,000行)能在几秒钟内完成吗?看似应该不难。: linux下面。
c*e2012-08-24 07:087 楼举俩例子1.sed -n '2'p filename打印文件的第二行。2.sed -n '1,3'p filename打印文件的1到3行【在 c***e 的大作中提到】: sed: : 501
G*Y2012-08-24 07:088 楼sed 具慢呀。他是每行扫描过去。不要的行也扫描吧【在 c***e 的大作中提到】: 举俩例子: 1.sed -n '2'p filename: 打印文件的第二行。: 2.sed -n '1,3'p filename: 打印文件的1到3行
G*Y2012-08-24 07:0810 楼这个文件有7G,你这个方法,得先扫描3,4G吧。几秒搞得定吗?要是想要最后几行,不是很慢?【在 s*****e 的大作中提到】: head -501000 file |tail -1000: : 501
s*e2012-08-24 07:0811 楼一分钟估计也搞定了。。。 没啥别的好办法,除非你先做索引【在 G**Y 的大作中提到】: 这个文件有7G,: 你这个方法,得先扫描3,4G吧。几秒搞得定吗?: 要是想要最后几行,不是很慢?
s*e2012-08-24 07:0819 楼实在要快,可以考虑binary format不过那东西比较容易出问题。建议还是索引的办法比较好。还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制在10秒以内。【在 g*****n 的大作中提到】: 有办法啊, 费空间的办法啊, 开始处理就固定每行的size
G*Y2012-08-24 07:0820 楼看来如果是文本文件,最快的话,每个记录也要至少读一次。基本上是无解了?据说可以把它转成数据库,然后随机读取?【在 h*********u 的大作中提到】: : 怎么跳? 除非每行size一样
e*t2012-08-24 07:0821 楼没读懂你的问题query 么SELECT * FROM `Table_name` WHERE `id` BETWEEN 50000 AND 60000 ORDER BY XXX;
g*n2012-08-24 07:0822 楼也行, 反正就是速度和空间的折衷【在 s*****e 的大作中提到】: 实在要快,可以考虑binary format不过那东西比较容易出问题。: 建议还是索引的办法比较好。: 还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制: 在10秒以内。
c*e2012-08-24 07:0823 楼我也就能想到这个 写个脚本 拆开查吧【在 s*****e 的大作中提到】: 实在要快,可以考虑binary format不过那东西比较容易出问题。: 建议还是索引的办法比较好。: 还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制: 在10秒以内。
h*u2012-08-24 07:0824 楼db可以啊,【在 G**Y 的大作中提到】: 看来如果是文本文件,最快的话,每个记录也要至少读一次。基本上是无解了?: 据说可以把它转成数据库,然后随机读取?
a*a2012-08-24 07:0826 楼sed很快。我一个72M行的文件,取第36M位置的行出来,不到6秒。【在 G**Y 的大作中提到】: sed 具慢呀。: 他是每行扫描过去。: 不要的行也扫描吧
h*52012-08-24 07:0830 楼用DB的话要DB转换成structured data.其实你这个就是big data的一个很好应用,例如用mapreduce/hadoop.【在 G**Y 的大作中提到】: 啥 db比较方便,大侠zkss?