Redian新闻
>
码工码农,帮忙了! (转载)
avatar
码工码农,帮忙了! (转载)# Linux - Linux 操作系统
o*5
1
从国内进的设备出现质量问题.国内厂家需带便携式探伤仪来美检测,不知可否?若不行,
在美可以租到吗? 便携式波超声探伤仪.没时间去GOOGLE了.若有知道的,赐教.多谢!
avatar
G*Y
2
【 以下文字转载自 PhotoGear 讨论区 】
发信人: GGYY (唧唧歪歪), 信区: PhotoGear
标 题: 码工码农,帮忙了!
发信站: BBS 未名空间站 (Fri Aug 24 16:09:45 2012, 美东)
技术帖。
一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
,000行)能在几秒钟内完成吗?看似应该不难。
linux下面。
avatar
g*s
3
不可以托运吗?

行,

【在 o*******5 的大作中提到】
: 从国内进的设备出现质量问题.国内厂家需带便携式探伤仪来美检测,不知可否?若不行,
: 在美可以租到吗? 便携式波超声探伤仪.没时间去GOOGLE了.若有知道的,赐教.多谢!

avatar
y*n
4
hash吧。
avatar
o*5
5
需要报关吗?
avatar
L*n
6
首先什么文件,文本的还是字节的,你想干什么?写C程序还是script处理数据?

501

【在 G**Y 的大作中提到】
: 【 以下文字转载自 PhotoGear 讨论区 】
: 发信人: GGYY (唧唧歪歪), 信区: PhotoGear
: 标 题: 码工码农,帮忙了!
: 发信站: BBS 未名空间站 (Fri Aug 24 16:09:45 2012, 美东)
: 技术帖。
: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
: ,000行)能在几秒钟内完成吗?看似应该不难。
: linux下面。

avatar
l*n
7
几秒完成那是不可能的, 除非是每行固定长度或者允许事先花个几分钟的时间做一个索
引文件.

501

【在 G**Y 的大作中提到】
: 【 以下文字转载自 PhotoGear 讨论区 】
: 发信人: GGYY (唧唧歪歪), 信区: PhotoGear
: 标 题: 码工码农,帮忙了!
: 发信站: BBS 未名空间站 (Fri Aug 24 16:09:45 2012, 美东)
: 技术帖。
: 一个文件1百多万行,怎么最快的从里面读出任意指定的行?(比如第500,000到第501
: ,000行)能在几秒钟内完成吗?看似应该不难。
: linux下面。

avatar
G*Y
8
文本的,就是一个巨大矩阵,
我需要从中间随意读出几行。

【在 L***n 的大作中提到】
: 首先什么文件,文本的还是字节的,你想干什么?写C程序还是script处理数据?
:
: 501

avatar
a*a
9
允许事先建立索引吧

【在 G**Y 的大作中提到】
: 文本的,就是一个巨大矩阵,
: 我需要从中间随意读出几行。

avatar
L*n
10
文本文件应该没什么难的,python应该没问题吧,如果
是手工编辑vim也可以。几秒钟这个要求不高。文件多大啊,
上G么

【在 G**Y 的大作中提到】
: 文本的,就是一个巨大矩阵,
: 我需要从中间随意读出几行。

avatar
G*h
11
tail -5000 | head -1
hehe 不过很慢

【在 G**Y 的大作中提到】
: 文本的,就是一个巨大矩阵,
: 我需要从中间随意读出几行。

avatar
G*Y
12
上G了,7个G吧。没法都搞到内存里。一是内存不够,而是I/O太慢。
google了一下,有人说可以把它转成一个数据库。然后随机选取就容易了?

【在 L***n 的大作中提到】
: 文本文件应该没什么难的,python应该没问题吧,如果
: 是手工编辑vim也可以。几秒钟这个要求不高。文件多大啊,
: 上G么

avatar
G*Y
13
允许是允许,可要是让我自己建,就又得调试,测试啥的。得不偿失了。

【在 a****a 的大作中提到】
: 允许事先建立索引吧
avatar
L*n
14
7G vim就不行了,简单点处理,你先split成几个小文件吧

【在 G**Y 的大作中提到】
: 上G了,7个G吧。没法都搞到内存里。一是内存不够,而是I/O太慢。
: google了一下,有人说可以把它转成一个数据库。然后随机选取就容易了?

avatar
G*Y
15
看来只能先这样了。

【在 L***n 的大作中提到】
: 7G vim就不行了,简单点处理,你先split成几个小文件吧
avatar
L*n
16
你的是矩阵,所以列数固定,应该很容易算从哪个文件里找第几行吧

【在 G**Y 的大作中提到】
: 看来只能先这样了。
avatar
l*n
17
允许的话那就一点难度都没有了, 最简单的如果不缺存储空间的话就用split命令分割
成1万行的一堆小文件, 然后的事情就很easy了.

【在 G**Y 的大作中提到】
: 允许是允许,可要是让我自己建,就又得调试,测试啥的。得不偿失了。
avatar
G*Y
18
csv的。
不能确定是fixed width的,可能有些数字长,有些数字短呀。

【在 L***n 的大作中提到】
: 你的是矩阵,所以列数固定,应该很容易算从哪个文件里找第几行吧
avatar
G*h
19
纯数据弄到数据库里访问比较爽

【在 G**Y 的大作中提到】
: csv的。
: 不能确定是fixed width的,可能有些数字长,有些数字短呀。

avatar
L*n
20
哦,先写个小程序把大文件分割成固定行数的若干小文件吧,
可能你要数\n来决定在哪里分割了,不知道有没有现成的工具
干这个的,这步可能慢些,分割完了以后查找就快了。

【在 G**Y 的大作中提到】
: csv的。
: 不能确定是fixed width的,可能有些数字长,有些数字短呀。

avatar
G*Y
21
zkss?
听说是可以搞到sqlite里。但是俺对这玩意一点都不熟。
google了一下,没找到特别简单的csv转sqlite的工具(csv 1000来列,能自动处理列
名吗?)
关键就不知道从哪开始google

【在 G*****h 的大作中提到】
: 纯数据弄到数据库里访问比较爽
avatar
l*n
22
split呀, 比如如果文件是千万行这个级别的话, 下面这样就可以了
split -l 10000 -d -a 4 filename filename
分割后的文件命名filename0000, filename0001, ...

【在 L***n 的大作中提到】
: 哦,先写个小程序把大文件分割成固定行数的若干小文件吧,
: 可能你要数\n来决定在哪里分割了,不知道有没有现成的工具
: 干这个的,这步可能慢些,分割完了以后查找就快了。

avatar
L*n
23
ft 我还真不知道split可以按行分...

【在 l******n 的大作中提到】
: split呀, 比如如果文件是千万行这个级别的话, 下面这样就可以了
: split -l 10000 -d -a 4 filename filename
: 分割后的文件命名filename0000, filename0001, ...

avatar
l*n
24
... split就是按照行分的呀, csplit才是按照pattern来分.

【在 L***n 的大作中提到】
: ft 我还真不知道split可以按行分...
avatar
L*n
25
我以前从来都是按字节分的...

【在 l******n 的大作中提到】
: ... split就是按照行分的呀, csplit才是按照pattern来分.
avatar
G*Y
26
我就是用这个分了,现在分了10几个,看看够不够快。不行就得分100个了。

【在 l******n 的大作中提到】
: split呀, 比如如果文件是千万行这个级别的话, 下面这样就可以了
: split -l 10000 -d -a 4 filename filename
: 分割后的文件命名filename0000, filename0001, ...

avatar
l*n
27
分小点好, 如果是ext系列文件系统的话吧1000个左右基本不怎么影响速度, 如果是
reiserfs文件系统的话, 可以分得更多一点.

【在 G**Y 的大作中提到】
: 我就是用这个分了,现在分了10几个,看看够不够快。不行就得分100个了。
avatar
m*5
28
database啊
avatar
m*5
29
try pytable

【在 G**Y 的大作中提到】
: zkss?
: 听说是可以搞到sqlite里。但是俺对这玩意一点都不熟。
: google了一下,没找到特别简单的csv转sqlite的工具(csv 1000来列,能自动处理列
: 名吗?)
: 关键就不知道从哪开始google

avatar
kc
30
Google一下aster database,用ncluster_loader非常适合你这需要。半个小时内就能
搞明白。
而且可以直接都csv file

zkss?听说是可以搞到sqlite里。但是俺对这玩意一点都不熟。google了一下,没找到
特别简单的csv转sqlite的工具(csv 1000来列,能自动处理列名吗?)关键........
★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite

【在 G**Y 的大作中提到】
: 我就是用这个分了,现在分了10几个,看看够不够快。不行就得分100个了。
avatar
l*i
31
map reduce, hadoop
avatar
S*A
32
这个问题要搞清楚前提是什么。
例如要读的大文件是要反复修改的么?
是读一次还是反复读若干行?
假设大文件是不修改的,需要反复读若干行。
那就用程序建立个 Index 好了,数组记住每一行开始在
什么位置。
然后查找就是数组里面按照行号查找就知道位置了。
如果是只读一次,没有辅助信息。那就从头向后数就行了,
而且这个没有更加简单的办法。因为每个字节都可能是新行,
所以必须每个字节都遍历一次直到查找的行号。
avatar
w*w
33
没人提把table存成binary?还省了parsing。
avatar
h*c
34
我的原则:
随机读写-〉database
whole table scale-〉file split, sort, merge (basically mapper reducer)
avatar
d*n
35
1. first use getc() or getline (),
when reach a newline char '\n', use ftell() function save the current
position into a list/array sequentially
save this entire array into a text/binary format file as index.
2. when you try to pull out server lines from the huge file,
organize the line numbers in ascending order,
for each line number in your query
binary search your previous saved index
lseek the position in the index.
getc() or getline() until to the first '\n' by that offset
3. done
avatar
c*r
36
根据我很久以前的经验,sqlite处理这么大的玩意儿很吃力。上mysql吧。

【在 G**Y 的大作中提到】
: zkss?
: 听说是可以搞到sqlite里。但是俺对这玩意一点都不熟。
: google了一下,没找到特别简单的csv转sqlite的工具(csv 1000来列,能自动处理列
: 名吗?)
: 关键就不知道从哪开始google

avatar
w*w
37
转成binary,只要4个字节一个数,文件size至少减半。然后做个最简单的FIFO buffer,
不在buffer里就去读文件,还有什么比这个更快?
avatar
b*s
38
果然不问不知道需求。快速读取,也许可以参考cache命中的方法?

【在 G**Y 的大作中提到】
: 文本的,就是一个巨大矩阵,
: 我需要从中间随意读出几行。

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