2015-11-12 2 views
1

Я очень новичок в Perl и пытаюсь заставить ее работать. Я хочу напечатать 3 конкретных столбца, когда содержимое столбца 1 ==> 0 и столбец 2 содержит «I» (римская цифра для 1). Следующие строки возвращают все строки, содержащие> 0, но НЕ содержащие «I».Печать строки, если несколько совпадений

perl -lane 'print "$F[0]\t$F[1]\t$F[5]" if $F[1] > 0 && $F[0]==/I/' input > output 

Что я сделал не так? Я также стараюсь, чтобы он соответствовал шаблону, т.е. я не хочу, чтобы он вытащил «II» или «VIII», например.

ответ

5

Вы должны использовать binding operator=~, не == которое тест числового равенства, чтобы проверить строку против регулярных выражений шаблона

И вам нужно якоря в начале и конце шаблона, если вы хотите для указания всего его содержимого. Читайте об этом в Metacharacters

$F[0]==/I/ 

должен быть

$F[0] =~ /^I$/ 

или, лучше, просто использовать тест строки равенства

$F[0] eq 'I' 
Смежные вопросы