2017-01-24 3 views
1

Ich habe eine Textdatei. Z.B.Perl eine Zeile Skript mit Bedingung

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

Ich versuche Linie auszuwählen, die "Eins" mit Perl-Einzeiler enthält:

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

Aber ich bekomme alle Zeilen aus einer Datei. Ich brauche keinen regulären Ausdruck (reg exp hilft in diesem Fall), ich brauche genau Übereinstimmung auf dem zweiten Feld. Vielen Dank im Voraus

+5

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

Antwort

3

Verwenden Sie eq für String-Vergleich anstelle von ==, die für den numerischen Vergleich verwendet wird.

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

Edit: Wie toolic in seinem Kommentar vorgeschlagen hat, wenn Sie Warnungen benutzt hatten, könnte man leicht das Problem vor Ort hat.

$ 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 
Verwandte Themen