2017-01-24 3 views
1

テキストファイルがあります。例えば。perl条件付きの1行スクリプト

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

をしかし、私は、ファイルからすべての行を取得:

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

私は、 "1" のperl-onelinerを使用して含まれている行を選択してみてください。 正規表現を使用する必要はありません(この場合はreg expが役に立ちます)、2番目のフィールドに正確に一致する必要があります。 ありがとうございました

+5

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

答えて

3

数値比較に使用される==ではなく、文字列比較にeqを使用してください。

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

編集: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