我需要解析一个制表符分隔文件,我想跳过不包含任何字母数字字符的行。
文件中的每一行都包含不包含任何数据的制表符分隔字段。因此,如果不是行中的选项卡,它似乎是一个空行。
我尝试过使用next,除非line有一个字母数字字符但是没有用 有什么想法吗?感谢
while (defined($line = <IN>)){
chomp($line);
next unless $line =~ /\w/;
print OUT "$fields[3]\t$fields[4]\t$fields[5]\t$fields[6]\t$fields[13]\t$fields[15]\t$fields[10]\n";
}
答案 0 :(得分:0)
几行输入可能有助于输入几行。你是在重新声明块中的@field数组还是一遍又一遍地打印同一组值? e.g。
while (<$fh>) {
chomp;
my @fields = split(/\t/, $_, -1);
print OUT join("\t", map { $fields[$_] } (3,4,5,6,13,15,10)), "\n" if $_ =~ m/\w+/;
}
答案 1 :(得分:0)
要匹配包含字母数字字符的行,请使用:
.*?[\p{L}\p{Nd}]+.*
答案 2 :(得分:-1)
我认为您需要在\ w中添加一些数量。请尝试\ w +。
答案 3 :(得分:-1)
试试这个:
while (defined($line = <IN>)){
chomp($line);
next if $line =~ /^\s*$/;
print OUT "$fields[3]\t$fields[4]\t$fields[5]\t$fields[6]\t$fields[13]\t$fields[15]\t$fields[10]\n";
}