G**Y 发帖数: 33224 | 1 技术帖。
一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
,000行)能在几秒钟内完成吗?看似应该不难。
linux下面。 |
o****p 发帖数: 9785 | 2 现在不是8086的年代了啊。
501
【在 G**Y 的大作中提到】 : 技术帖。 : 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501 : ,000行)能在几秒钟内完成吗?看似应该不难。 : linux下面。
|
c***e 发帖数: 1453 | 3 sed
501
【在 G**Y 的大作中提到】 : 技术帖。 : 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501 : ,000行)能在几秒钟内完成吗?看似应该不难。 : linux下面。
|
x5 发帖数: 27871 | 4 先发包子
501
【在 G**Y 的大作中提到】 : 技术帖。 : 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501 : ,000行)能在几秒钟内完成吗?看似应该不难。 : linux下面。
|
l*******b 发帖数: 2586 | 5 这个除了一个一个的数EOL还有什么办法...... |
s*****e 发帖数: 21415 | 6 head -501000 file |tail -1000
501
【在 G**Y 的大作中提到】 : 技术帖。 : 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501 : ,000行)能在几秒钟内完成吗?看似应该不难。 : linux下面。
|
c***e 发帖数: 1453 | 7 举俩例子
1.sed -n '2'p filename
打印文件的第二行。
2.sed -n '1,3'p filename
打印文件的1到3行
【在 c***e 的大作中提到】 : sed : : 501
|
G**Y 发帖数: 33224 | 8 sed 具慢呀。
他是每行扫描过去。
不要的行也扫描吧
【在 c***e 的大作中提到】 : 举俩例子 : 1.sed -n '2'p filename : 打印文件的第二行。 : 2.sed -n '1,3'p filename : 打印文件的1到3行
|
h*********u 发帖数: 10868 | 9
sed 可以,不过sed本身也是靠读行实现的吧
【在 c***e 的大作中提到】 : sed : : 501
|
G**Y 发帖数: 33224 | 10 这个文件有7G,
你这个方法,得先扫描3,4G吧。几秒搞得定吗?
要是想要最后几行,不是很慢?
【在 s*****e 的大作中提到】 : head -501000 file |tail -1000 : : 501
|
|
|
s*****e 发帖数: 21415 | 11 一分钟估计也搞定了。。。 没啥别的好办法,除非你先做索引
【在 G**Y 的大作中提到】 : 这个文件有7G, : 你这个方法,得先扫描3,4G吧。几秒搞得定吗? : 要是想要最后几行,不是很慢?
|
G**Y 发帖数: 33224 | 12 看来我只好把文件split了。
【在 s*****e 的大作中提到】 : 一分钟估计也搞定了。。。 没啥别的好办法,除非你先做索引
|
c***e 发帖数: 1453 | 13 是啊 7G 太大了 呵呵 我处理的小多了
【在 h*********u 的大作中提到】 : : sed 可以,不过sed本身也是靠读行实现的吧
|
G**Y 发帖数: 33224 | 14 我都知道行好了,不能跳快点吗?
【在 c***e 的大作中提到】 : 是啊 7G 太大了 呵呵 我处理的小多了
|
v***a 发帖数: 23651 | 15 找轩儿223和小黄
【在 G**Y 的大作中提到】 : 我都知道行好了,不能跳快点吗?
|
g*****n 发帖数: 21539 | 16 有办法啊, 费空间的办法啊, 开始处理就固定每行的size
【在 s*****e 的大作中提到】 : 一分钟估计也搞定了。。。 没啥别的好办法,除非你先做索引
|
h*********u 发帖数: 10868 | 17
怎么跳? 除非每行size一样
【在 G**Y 的大作中提到】 : 我都知道行好了,不能跳快点吗?
|
G**Y 发帖数: 33224 | 18 把文件转成binary的,然后随机访问?
【在 g*****n 的大作中提到】 : 有办法啊, 费空间的办法啊, 开始处理就固定每行的size
|
s*****e 发帖数: 21415 | 19 实在要快,可以考虑binary format不过那东西比较容易出问题。
建议还是索引的办法比较好。
还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制
在10秒以内。
【在 g*****n 的大作中提到】 : 有办法啊, 费空间的办法啊, 开始处理就固定每行的size
|
G**Y 发帖数: 33224 | 20 看来如果是文本文件,最快的话,每个记录也要至少读一次。基本上是无解了?
据说可以把它转成数据库,然后随机读取?
【在 h*********u 的大作中提到】 : : 怎么跳? 除非每行size一样
|
|
|
e****t 发帖数: 17914 | 21 没读懂你的问题
query 么
SELECT * FROM `Table_name` WHERE `id` BETWEEN 50000 AND 60000 ORDER BY XXX; |
g*****n 发帖数: 21539 | 22 也行, 反正就是速度和空间的折衷
【在 s*****e 的大作中提到】 : 实在要快,可以考虑binary format不过那东西比较容易出问题。 : 建议还是索引的办法比较好。 : 还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制 : 在10秒以内。
|
c***e 发帖数: 1453 | 23 我也就能想到这个 写个脚本 拆开查吧
【在 s*****e 的大作中提到】 : 实在要快,可以考虑binary format不过那东西比较容易出问题。 : 建议还是索引的办法比较好。 : 还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制 : 在10秒以内。
|
h*********u 发帖数: 10868 | 24
db可以啊,
【在 G**Y 的大作中提到】 : 看来如果是文本文件,最快的话,每个记录也要至少读一次。基本上是无解了? : 据说可以把它转成数据库,然后随机读取?
|
e****t 发帖数: 17914 | |
a****a 发帖数: 3905 | 26 sed很快。我一个72M行的文件,取第36M位置的行出来,不到6秒。
【在 G**Y 的大作中提到】 : sed 具慢呀。 : 他是每行扫描过去。 : 不要的行也扫描吧
|
G**Y 发帖数: 33224 | 27 啥 db比较方便,大侠zkss?
【在 h*********u 的大作中提到】 : : db可以啊,
|
G**Y 发帖数: 33224 | 28 sqlite似乎很强大!
【在 G**Y 的大作中提到】 : 啥 db比较方便,大侠zkss?
|
h**********5 发帖数: 5355 | 29 工哥一句话总结了所有算法的内涵
【在 g*****n 的大作中提到】 : 也行, 反正就是速度和空间的折衷
|
h**********5 发帖数: 5355 | 30 用DB的话要DB转换成structured data.其实你这个就是big data的一个很好应用,例如
用mapreduce/hadoop.
【在 G**Y 的大作中提到】 : 啥 db比较方便,大侠zkss?
|