在指定的perl行数之后断行

时间:2014-04-17 23:16:27

标签: perl

我有一个包含数千行数据的csv文件,看起来像这样 没有, 没有, 是, 没有, 没有, 没有, 没有, 没有, 没有, 没有, 没有, 没有, 是的,等等

我需要每隔16行断行并输出到新文件。 Perl noobie在这里,请帮忙!

2 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使用perlvar

中记录的$.变量
  

HANDLE->input_line_number( EXPR )

     

$INPUT_LINE_NUMBER

     

$NR

     

$.

     

访问的最后一个文件句柄的当前行号。

     

Perl中的每个文件句柄都会计算从中读取的行数。 (根据$/的值,Perl对构成一行的构想可能与您的不匹配。)从文件句柄(通过readline()<>)读取行时,或者tell()seek()被调用,$.成为该文件句柄的行计数器的别名。

因此,在阅读文件时,您可以按if (0 == ($. % 16))

确定每第16行

答案 1 :(得分:0)

虽然,我建议使用保留当前行号的$.,但我不知道行的开始位置。

您可以使用计数器变量跟踪行,只要我们知道每行都以yes或no开头;

use strict;
use warnings;

my $count = 0;
my $i = 0;
open my $fh,'>', "file$i.txt" or die "$!";

while(my $line = <>){
    chomp $line;
    unless($count%16){
        open ($fh, '>', "file$i.txt") or die "$!";
        $i++;
    }
    $count = ($line =~ /^(yes|no)/i) ? $count+1:$count; 
    print $fh "$line\n";

}

用法:

perl <script.pl> <inputfile.csv>