2017-01-24 6 views
1

У меня есть текстовый файл. Например.perl один скрипт строки с условием

1;one;111 
2;two;222 
22;two;222 
3;three;333 

Я пытаюсь выбрать строку, которая содержит "один" с помощью Perl-Oneliner:

perl -F";" -lane 'print if $F[1]=="one"' forPL.txt 

Но я получаю все строки из файла. Мне не нужно использовать регулярное выражение (reg exp помогает в этом случае), мне нужно точно совпадение во втором поле. Заранее спасибо

+5

'use warnings':' perl -w ... ' – toolic

ответ

3

Используйте сравнение eq вместо сравнения ==, которое используется для численного сравнения.

perl -F";" -e 'print if $F[1] eq "one" ' test.txt 

Edit: Как toolic предложил в своем комментарии, если бы вы использовали предупреждение, вы могли бы легко обнаружить проблему.

$ perl -F";" -e 'use warnings; print if $F[1] == "one" ' test.txt 
Argument "one" isn't numeric in numeric eq (==) at -e line 1, <> line 1. 
Argument "one" isn't numeric in numeric eq (==) at -e line 1, <> line 1. 
1;one;111 
Argument "two" isn't numeric in numeric eq (==) at -e line 1, <> line 2. 
2;two;222 
Argument "two" isn't numeric in numeric eq (==) at -e line 1, <> line 3. 
22;two;222 
Argument "three" isn't numeric in numeric eq (==) at -e line 1, <> line 4. 
3;three;333 
Смежные вопросы