Perl: сопоставление строк по числовому значению или

#regex #perl #matching

#регулярное выражение #perl #соответствие

Вопрос:

У меня есть файл tsv, который содержит два столбца (называемые TG и ESP), которые имеют либо числовое значение, либо равны нулю. Я хочу отфильтровать файл и сохранить только те строки, которые либо имеют значение меньше 1, либо не имеют значения. Я написал следующий цикл while:

 while (<FILE>) {
    my $line = $_;
    chomp $line;
    my @c = split('t', $line);
    my $TG = $c[34];
    if ( $TG !~ /s/ || $TG > 1 ) { next; }
    my $ESP = $c[39];
    if ( $ESP !~ /s/ || $ESP > 1 ) { next; }
    print "$linen";
 

По какой-то причине эти операторы if заставляют мою программу пропускать каждую строку в файле. Я хочу, чтобы операторы if пропускали только те строки, числовое значение которых больше 1. Есть идеи, что я делаю не так?

Комментарии:

1. Добавьте несколько операторов print по всему циклу while в виде трассировок, чтобы вы могли видеть, что делает программа и почему она принимает определенные решения. Умение отслеживать запущенную программу является одним из ключевых навыков программирования.

Ответ №1:

Вы пропускаете, если одно из этих двух полей не содержит пробела

 $TG !~ /s/
 

Поскольку в файле tsv нет такого понятия, как «нулевое» значение, возможно, вы просто хотите проверить, являются ли они числовыми, прежде чем выполнять сравнение?

 next if $TG =~ /d/ amp;amp; $TG > 1;