2012-03-28 3 views
1

Ich habe eine Datei wie folgt aus:?Wie Zeilen ausgewählt, in welcher Spalte zwei und drei sind nicht gleich zueinander sind und 0 oder 1 (mit awk)

AX-75448119 0 1 
AX-75448118 0.45 0.487179 
AX-75474642 0 0 
AX-75474643 0.25 0.820513 
AX-75448113 1 0 
AX-75474641 1 1 

und ich möchte die Zeilen wählen diese Spalte 2 und 3 sind nicht gleich und 0 oder 1 (beide)! (Das heißt, wenn die Spalte 2 und 3 sind ähnlich, aber gleich 0,5 (oder jede andere Zahl außer 0 und 1) Ich möchte diese Zeile haben) so würde der Ausgang sein:

AX-75448119 0 1 
AX-75448118 0.45 0.487179 
AX-75474643 0.25 0.820513 
AX-75448113 1 0 

Ich weiß, wie zu schreiben der Befehl die Zeilen auszuwählen, die Spalte 2 und 3 einander gleich sind und gleich 0 oder 1 ist, welche das ist:

awk '$2=$3==1 || $2=$3==0' test.txt | wc -l 

aber ich will genau das Gegenteil, alle Zeilen auszuwählen, die nicht die Ausgabe sind von dem obigen Befehl! Danke, ich hoffe, ich konnte erklären, was ich will

Antwort

3

Es könnte für Sie funktionieren, wenn ich Ihre Anforderungen richtig bekomme.

awk ' $2 != $3 { print; next } $2 == $3 && $2 != 0 && $2 != 1 { print }' INPUTFILE 

es in Aktion bei Ideone.com

+1

zu 'awk vereinfacht werden‚$ 2! = $ 3 || ($ 2 == $ 3 && $ 2! = 0 && $ 2! = 1) 'Dateiname' –

1

Dies könnte für Sie arbeiten :(?)

awk '($2==0 || $2==1) && ($3==0 || $3==1) && $2==$3{next}1' file 
Verwandte Themen