我正在写一个Perl脚本。如果指定列(此处为第13列)中的文本与某个文本(即“一个”或“两个”)匹配,则应将整行(所有列)复制到另一个文件中。我的输入是制表符分隔的.txt文件。
这是我到目前为止所做的:
my $table1 = $ARGV[0];
open(my $variants,$table1) || die "$! $table1";
open(my $out,'>',"filtered.txt") || die "Can't write new file: $!";
while(<$variants>){
chomp;
my @line=split(/\t/); #split on tabs
if (($line[12] =~ m/one/) || ($line[12] =~ m/two/)){
print $out "$_";
}
}
由于我收到了“使用未初始化的值”错误,我想知道在此代码中需要更改的内容。
答案 0 :(得分:3)
有什么问题?
perl -F'\t' -ane'print if $F[11]=~/one|two/' input > output
答案 1 :(得分:1)
这是一个应该使用Unix过滤器模型编写的程序的一个很好的例子。
#!/usr/bin/perl
use strict;
use warnings;
while (<>) {
my @line = split /\t/;
# Do you mean 12? That's the 13th field
print if $line[12] =~ /one/ || $line[12] =~ /two/;
}
编写起来更简单,更易于理解。哦,更灵活(没有硬编码的文件名)。
这样称呼:
$ ./my_filter < input_file.txt > output_file.txt