我有一个包含数千行数据的csv文件,看起来像这样 没有, 没有, 是, 没有, 没有, 没有, 没有, 没有, 没有, 没有, 没有, 没有, 是的,等等
我需要每隔16行断行并输出到新文件。 Perl noobie在这里,请帮忙!
答案 0 :(得分:0)
解决此问题的一种方法是使用perlvar
$.
变量
HANDLE->input_line_number( EXPR )
$INPUT_LINE_NUMBER
$NR
$.
访问的最后一个文件句柄的当前行号。
Perl中的每个文件句柄都会计算从中读取的行数。 (根据
$/
的值,Perl对构成一行的构想可能与您的不匹配。)从文件句柄(通过readline()
或<>
)读取行时,或者tell()
或seek()
被调用,$.
成为该文件句柄的行计数器的别名。
因此,在阅读文件时,您可以按if (0 == ($. % 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>