avatar
码工码农,帮忙了!# PhotoGear - 摄影器材
G*Y
1
技术帖。
一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
,000行)能在几秒钟内完成吗?看似应该不难。
linux下面。
avatar
o*p
2
现在不是8086的年代了啊。

501

【在 G**Y 的大作中提到】
: 技术帖。
: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
: ,000行)能在几秒钟内完成吗?看似应该不难。
: linux下面。

avatar
c*e
3
sed

501

【在 G**Y 的大作中提到】
: 技术帖。
: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
: ,000行)能在几秒钟内完成吗?看似应该不难。
: linux下面。

avatar
x5
4
先发包子

501

【在 G**Y 的大作中提到】
: 技术帖。
: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
: ,000行)能在几秒钟内完成吗?看似应该不难。
: linux下面。

avatar
l*b
5
这个除了一个一个的数EOL还有什么办法......
avatar
s*e
6
head -501000 file |tail -1000

501

【在 G**Y 的大作中提到】
: 技术帖。
: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
: ,000行)能在几秒钟内完成吗?看似应该不难。
: linux下面。

avatar
c*e
7
举俩例子
1.sed -n '2'p filename
打印文件的第二行。
2.sed -n '1,3'p filename
打印文件的1到3行

【在 c***e 的大作中提到】
: sed
:
: 501

avatar
G*Y
8
sed 具慢呀。
他是每行扫描过去。
不要的行也扫描吧

【在 c***e 的大作中提到】
: 举俩例子
: 1.sed -n '2'p filename
: 打印文件的第二行。
: 2.sed -n '1,3'p filename
: 打印文件的1到3行

avatar
h*u
9

sed 可以,不过sed本身也是靠读行实现的吧

【在 c***e 的大作中提到】
: sed
:
: 501

avatar
G*Y
10
这个文件有7G,
你这个方法,得先扫描3,4G吧。几秒搞得定吗?
要是想要最后几行,不是很慢?

【在 s*****e 的大作中提到】
: head -501000 file |tail -1000
:
: 501

avatar
s*e
11
一分钟估计也搞定了。。。 没啥别的好办法,除非你先做索引

【在 G**Y 的大作中提到】
: 这个文件有7G,
: 你这个方法,得先扫描3,4G吧。几秒搞得定吗?
: 要是想要最后几行,不是很慢?

avatar
G*Y
12
看来我只好把文件split了。

【在 s*****e 的大作中提到】
: 一分钟估计也搞定了。。。 没啥别的好办法,除非你先做索引
avatar
c*e
13
是啊 7G 太大了 呵呵 我处理的小多了

【在 h*********u 的大作中提到】
:
: sed 可以,不过sed本身也是靠读行实现的吧

avatar
G*Y
14
我都知道行好了,不能跳快点吗?

【在 c***e 的大作中提到】
: 是啊 7G 太大了 呵呵 我处理的小多了
avatar
v*a
15
找轩儿223和小黄

【在 G**Y 的大作中提到】
: 我都知道行好了,不能跳快点吗?
avatar
g*n
16
有办法啊, 费空间的办法啊, 开始处理就固定每行的size

【在 s*****e 的大作中提到】
: 一分钟估计也搞定了。。。 没啥别的好办法,除非你先做索引
avatar
h*u
17

怎么跳? 除非每行size一样

【在 G**Y 的大作中提到】
: 我都知道行好了,不能跳快点吗?
avatar
G*Y
18
把文件转成binary的,然后随机访问?

【在 g*****n 的大作中提到】
: 有办法啊, 费空间的办法啊, 开始处理就固定每行的size
avatar
s*e
19
实在要快,可以考虑binary format不过那东西比较容易出问题。
建议还是索引的办法比较好。
还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制
在10秒以内。

【在 g*****n 的大作中提到】
: 有办法啊, 费空间的办法啊, 开始处理就固定每行的size
avatar
G*Y
20
看来如果是文本文件,最快的话,每个记录也要至少读一次。基本上是无解了?
据说可以把它转成数据库,然后随机读取?

【在 h*********u 的大作中提到】
:
: 怎么跳? 除非每行size一样

avatar
e*t
21
没读懂你的问题
query 么
SELECT * FROM `Table_name` WHERE `id` BETWEEN 50000 AND 60000 ORDER BY XXX;
avatar
g*n
22
也行, 反正就是速度和空间的折衷

【在 s*****e 的大作中提到】
: 实在要快,可以考虑binary format不过那东西比较容易出问题。
: 建议还是索引的办法比较好。
: 还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制
: 在10秒以内。

avatar
c*e
23
我也就能想到这个 写个脚本 拆开查吧

【在 s*****e 的大作中提到】
: 实在要快,可以考虑binary format不过那东西比较容易出问题。
: 建议还是索引的办法比较好。
: 还有一个办法是把文件拆成若干份,比方说100000行一份,这样查找比较快,可以控制
: 在10秒以内。

avatar
h*u
24

db可以啊,

【在 G**Y 的大作中提到】
: 看来如果是文本文件,最快的话,每个记录也要至少读一次。基本上是无解了?
: 据说可以把它转成数据库,然后随机读取?

avatar
e*t
25
原来是文本文件
avatar
a*a
26
sed很快。我一个72M行的文件,取第36M位置的行出来,不到6秒。

【在 G**Y 的大作中提到】
: sed 具慢呀。
: 他是每行扫描过去。
: 不要的行也扫描吧

avatar
G*Y
27
啥 db比较方便,大侠zkss?

【在 h*********u 的大作中提到】
:
: db可以啊,

avatar
G*Y
28
sqlite似乎很强大!

【在 G**Y 的大作中提到】
: 啥 db比较方便,大侠zkss?
avatar
h*5
29
工哥一句话总结了所有算法的内涵

【在 g*****n 的大作中提到】
: 也行, 反正就是速度和空间的折衷
avatar
h*5
30
用DB的话要DB转换成structured data.其实你这个就是big data的一个很好应用,例如
用mapreduce/hadoop.

【在 G**Y 的大作中提到】
: 啥 db比较方便,大侠zkss?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。