也是关于perl文件定位,攫取中间内容

也是关于perl文件定位,攫取中间内容

看了kerom关于perl文件定位的帖子,结合flw的方法,对大文件选取其中内容的话
可以用 tail -n number filename的方法

在solaris 9 的实现方法是 tail -numberf filename

这种方法适应于从中间部分攫取到最后

但如果我想从500M有400万行的文件当中只攫取第三十万到三十五万的内容该如何进行操作

我的想法是

head -n 350000 filename | tail -50000 > temp.txt

这对小文件是可以的,但对于大文件来说单单管道之前的head操作最浪费很大的系统资源

同时head 和 tail 的缓存是有上限,即使缓存区很大,但过量的读取信息会造成系统负载过大

我想问的是,在现有的条件下,哪种方法能使系统负载最小

head和tail在读取过大文件的时候,是否合适?因为在企业中有时log文件会很大,十多G的情况也是有的


各位有什么好的方法吗? take forward to your response



QUOTE:
原帖由 gambolabc 于 2008-8-27 13:14 发表
看了kerom关于perl文件定位的帖子,结合flw的方法,对大文件选取其中内容的话
可以用 tail -n number filename的方法

在solaris 9 的实现方法是 tail -numberf filename

这种方法适应于从中间部分攫取到最 ...

1、攫取第三十万到三十五万的内容,貌似应该是50000行的内容,为啥tail -300001
2、head还浪费资源?那你可以换成awk,sed,perl再试试。
3、哪里用到了缓存?
head, tail, awk sed不是可以的吗,还有split也能达到你的要求。

你现在也搞perl了,以前看你在shell版里那是相当的牛X阿
1、攫取第三十万到三十五万的内容,貌似应该是50000行的内容,为啥tail -300001

对,是我搞错了,应该是head -n 350000 filename | tail -50000>temp.txt

我改过来

2、head还浪费资源?那你可以换成awk,sed,perl再试试。

head不也是先将文件存在缓存当中吗,如果攫取的文件较大,缓存就可能出现紧缺

3、哪里用到了缓存?

head 和 tail 有缓存上限的 我记得不太清楚 好像是20k bytes 有谁了解的?
缓存?? 你是指buffer size吧?
yes
缓存是缓存, buffer size 是 buffer size。而且buffer size 大点反而更快。
我说的是head 和 tail 的缓存是有上限,即使缓存区很大,但过量的读取信息会造成系统负载过大
我想问的是,在现有的条件下,哪种方法能使系统负载最小

head和tail在读取过大文件的时候,是否合适?因为在企业中有时log文件会很大,十多G的情况也是有的
关注一下... 期待flw现身