如何提取线条或行?

时间:2008-10-05 13:41:43

标签: perl parsing

如何连续提取整行,例如第3行。 这些数据保存在linux的文本编辑器中。 这是我的数据:

1,julz,kath,shiela,angel
2,may,ann,janice,aika
3,christal,justine,kim
4,kris,allan,jc,mine

我希望输出如下:

3,christal,justine,kim

6 个答案:

答案 0 :(得分:12)

以下代码段读取前三行,仅打印第三行然后退出以确保不会发生不必要的处理。

如果没有退出,脚本会继续处理输入文件,尽管你知道你没有用它。

perl -ne 'if ($. == 3) {print;exit}' infile.txt

perlvar指出时,$.是访问的最后一个文件句柄的当前行号。

答案 1 :(得分:7)

$ perl -ne'print if $. == 3' your_file.txt

以下是@ysth's answer的脚本版本:

$ perl -mTie::File -e'tie @lines, q(Tie::File), q(your_file.txt); 
> print $lines[2]'

答案 2 :(得分:5)

如果它总是第三行:

perl -ne 'print if 3..3' <infile >outfile

如果它始终是数字值为“3”的第一列:

perl -F, -nae 'print if $F[0] == 3' <infile >outfile # thanks for the comment doh!

由于你没有说明你是如何确定这条线的,所以我提供了替代方案。

答案 3 :(得分:3)

嗯,-n答案假设问题是“什么是脚本......”。在这种情况下,perl甚至不是最好的答案。但我没有把这个问题读到这个问题。

通常,如果行不是固定长度,则必须通读文件行 直到你到达你想要的线。 Tie::File为你自动完成这个过程(虽然它会替换它的代码非常简单,我自己也很少打扰它。)

use Tie::File;
use Fcntl "O_RDONLY";
tie my @line, "Tie::File", "yourfilename", mode => O_RDONLY
    or die "Couldn't open file: $!";
print "The third line is ", $line[2];

答案 4 :(得分:3)

更通用的解决方案:

open my $fh, '<', 'infile.txt';
while (my $line = <$fh>) {
  print $line if i_want_this_line($line);
}

其中i_want_this_line实现了定义所需行的标准。

答案 5 :(得分:2)

您可以将文件句柄上的菱形操作符指定给列表,每个元素都是一行或一行。

open $fh, "myfile.txt";
my @lines = <$fh>;

编辑:此解决方案会抓取所有行,以便您可以访问任何所需的行,例如第3行将是$lines[2] ...如果你真的只想要一个特定的行,那就像其他的回答者那样是一个不同的解决方案。