由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 怎么读一个超大文件的最后n行?
相关主题
求问读一个超大文件的最后n行的问题发个我总结的unix常用命令
ebay skype interview面经(4轮)google面试有问protocol buffer嘛
Dropbox电话面经一个特别的inplace merge two sorted arrays
L面经,请大家帮我看看二叉树按层次打印有没有办法换行显示?
如何实现read/write 任意 size using circular bufferGoog面试挂了,回报一下本版
auto completion如何根据popularity快速显示前几个?Unix/Linux下的C++ coding 跟Windows下到底有多大不同?
请教一道FB面试题A challenging interview question: revert a string
【急问】exprot license 申请文件中关于移民的问题问一个关于merge sort的小细节
相关话题的讨论汇总
话题: 文件话题: seek话题: 最后话题: 超大话题: buffer
进入JobHunting版参与讨论
1 (共1页)
B********t
发帖数: 147
1
文件比较小时可以用一个circular buffer,把整个文件读完,最后在buffer里的就是
需要读的内容。
如果文件很大,比如有几十G,有什么好方法呢?
g*******d
发帖数: 495
2
看多大size,然后seek到大概位置
B********t
发帖数: 147
3
就是说先得从file status里读出文件有多大么?fseek最大只能偏离2G左右,如果几十
G
的文件也没法seek到接近尾端啊。

【在 g*******d 的大作中提到】
: 看多大size,然后seek到大概位置
b*******e
发帖数: 6389
4
可以从文件最后开始往前seek。
fseek ( pFile , -10 , SEEK_END );

【在 B********t 的大作中提到】
: 文件比较小时可以用一个circular buffer,把整个文件读完,最后在buffer里的就是
: 需要读的内容。
: 如果文件很大,比如有几十G,有什么好方法呢?

B********t
发帖数: 147
5
那是不是还得给个max_line_size? 不知道tail命令是怎么实现的。如果一行的size大
于了这个max_line_size了 怎么办?

【在 b*******e 的大作中提到】
: 可以从文件最后开始往前seek。
: fseek ( pFile , -10 , SEEK_END );

b*******e
发帖数: 6389
6
每次读个1024个字节,自己找换行符嘛。
直到找到指定行数,或者到了文件开始位置,结束。

【在 B********t 的大作中提到】
: 那是不是还得给个max_line_size? 不知道tail命令是怎么实现的。如果一行的size大
: 于了这个max_line_size了 怎么办?

r*******e
发帖数: 7583
7
tail的实现
http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c
467行开始

【在 B********t 的大作中提到】
: 那是不是还得给个max_line_size? 不知道tail命令是怎么实现的。如果一行的size大
: 于了这个max_line_size了 怎么办?

B********t
发帖数: 147
8
眼睛看花了。

【在 r*******e 的大作中提到】
: tail的实现
: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c
: 467行开始

c*******1
发帖数: 589
9
读system call的manual.
man 2 stat 看文件size.
man 2 lseek.
man 2 read.
至于能不能优化performance, 看具体要求了。
w********i
发帖数: 389
10
awk ' NR>(FNR-n)' test.txt
相关主题
auto completion如何根据popularity快速显示前几个?发个我总结的unix常用命令
请教一道FB面试题google面试有问protocol buffer嘛
【急问】exprot license 申请文件中关于移民的问题一个特别的inplace merge two sorted arrays
进入JobHunting版参与讨论
f********4
发帖数: 988
11
tail那个思路很直接啊。。但是它那个function原来就知道文件末尾的位置,如果不知
道,要把指针放在最后之前,还是要把文件读一遍。。那还不如原来那个用circular
buf的思路了吧。。
r*****e
发帖数: 792
12
这个效率问题取决于OS的文件系统。我不清楚seekg是怎么实现的,但是可以想象
成文件是按block load进来的,所以找ios::end时,应该是按block跳过,而不是
circular array的那样line by line,所以当文件很大时,先找end再往回应该
更高效。当然极端情况下,从end开始有可能performance差,比如在n行的文件里找
最后的n行,往回读是是按byte的,这样就慢多了。

【在 f********4 的大作中提到】
: tail那个思路很直接啊。。但是它那个function原来就知道文件末尾的位置,如果不知
: 道,要把指针放在最后之前,还是要把文件读一遍。。那还不如原来那个用circular
: buf的思路了吧。。

B**********2
发帖数: 923
13
要求用什么语言呢?
Bash的话,直接tail就好了

【在 B********t 的大作中提到】
: 文件比较小时可以用一个circular buffer,把整个文件读完,最后在buffer里的就是
: 需要读的内容。
: 如果文件很大,比如有几十G,有什么好方法呢?

B********t
发帖数: 147
14
用c或c++。 题目是实现tail命令的-n 和 -f两个功能

【在 B**********2 的大作中提到】
: 要求用什么语言呢?
: Bash的话,直接tail就好了

k*******2
发帖数: 84
15
如果要求输出的N很大,不能fit到memory,是否只能找到起始行后在重新读file?
如果N不是很大的话,是否可以在scan back的时候就将读到的部分buffer起来?
多谢!
k*******2
发帖数: 84
16
貌似从后往前seek这个功能是不portable的?而且万一系统的实现这个功能的方式仍然
是从前往后seek怎么办呢?
http://stackoverflow.com/questions/10164597/how-would-you-imple
这个链接上说从尾行向前seek这个方法只适用于小数据。
我对文件这一块不熟悉。能否解说一下?多谢!

【在 b*******e 的大作中提到】
: 可以从文件最后开始往前seek。
: fseek ( pFile , -10 , SEEK_END );

1 (共1页)
进入JobHunting版参与讨论
相关主题
问一个关于merge sort的小细节如何实现read/write 任意 size using circular buffer
微软onsite面经auto completion如何根据popularity快速显示前几个?
很多公司把似乎不接受pdf格式的简历请教一道FB面试题
求一个老帖子 amazon面试FAQ【急问】exprot license 申请文件中关于移民的问题
求问读一个超大文件的最后n行的问题发个我总结的unix常用命令
ebay skype interview面经(4轮)google面试有问protocol buffer嘛
Dropbox电话面经一个特别的inplace merge two sorted arrays
L面经,请大家帮我看看二叉树按层次打印有没有办法换行显示?
相关话题的讨论汇总
话题: 文件话题: seek话题: 最后话题: 超大话题: buffer