0

我正在写一个 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 "$_";
    }   
}

由于我收到“使用未初始化值”错误,我想知道此代码中需要更改的内容。

4

2 回答 2

3

问题是什么?

perl -F'\t' -ane'print if $F[11]=~/one|two/' input > output
于 2013-07-30T13:45:54.247 回答
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
于 2013-07-30T13:46:16.180 回答