请教一个关于文本文件内容提取的菜鸟问题,谢谢!

请教一个关于文本文件内容提取的菜鸟问题,谢谢!

请教一个关于文本文件内容提取的菜鸟问题,谢谢!
假设Linux文件系统中有一个巨型文本文件,现要将该文件的最后200行按倒数第一行、倒数第二行…的顺序打印输出,请问应该怎么编写perl程序啊?

Linux下有tac函数可以将文件按行的倒序输出,但如何只截取出最后的那200行再输出啊?

谢谢!!!!!
[CCB]10[/CCB][CCB]10[/CCB]
my @last_lines;--my $c.
my @last_lines;
my $count=1;
while (my $line = <FH>) {
push @last_lines,$line;
shift @last_lines if $count++ > 200;
}
map {print "$_\n"} reverse @last_lines;
直接把文件放进一个变量进行操作会更简单,不过不知道文件有多大,是不是会吃光内存
huge file
可以使用Tie::File模块进行行操作。 下面是手册中的原文。

"Tie::File" represents a regular text file as a Perl array. Each ele-
ment in the array corresponds to a record in the file. The first line
of the file is element 0 of the array; the second line is element 1,
and so on.

The file is not loaded into memory, so this will work even for gigantic
files.

Changes to the array are reflected in the file immediately.

或者可以考虑用seek+正则表达式,从文件的结束往前读取数据内容.然后把最后要求的行数输出.
1. SHELL很容易做到, tail.
1. SHELL很容易做到, tail -200 filename | tac, 很适合大型文件.

2. PERL的话, TIE:FILE比较合适, 不加载到内存, 适合大型文件.