So löschen Sie Zeilen, bei denen die von Null verschiedenen Elemente kleiner als eins sind

So löschen Sie Zeilen, bei denen die von Null verschiedenen Elemente kleiner als eins sind

Ich möchte Zeilen löschen, in denenalle Elemente ungleich Nullsind kleiner als eins

Meine Datei ist

a   2   0   0   0   9
b   3   0   0   0.7 13
c   0.3 0.5 0   0   0
d   0.4 7.96681779026634e-05    0       0     

Die erwartete Ausgabe ist

a   2   0   0   0   9
b   3   0   0   0.7 13

Ich bin Anfänger. Ich habe versucht awk '{for(i=2;i<=NF;i++){if($i+0=0 print $0; else < 1) next}} 1', einen vorherigen Code zu bearbeiten, wie indieser Link, aber ich mache etwas falsch.

Antwort1

Versuchen:

$ awk '{f=0; for(i=2;i<=NF;i++) if($i+0!=0 && $i+0>=1)f=1} f' file
a  2   0   0   0   9
b   3   0   0   0.7 13

Der Code verwendet eine Variable f. Wenn fsie als wahr (ungleich Null) endet, drucken wir die Zeile.

  • f=0

    Setzen Sie für jede Zeile zunächst den Wert fauf „false“ (nicht drucken).

  • for(i=2;i<=NF;i++) if($i+0!=0 && $i+0>=1)f=1

    Wenn ein beliebiges Element ungleich Null und größer als Eins ist, wird es fauf 1(true) gesetzt.

  • f

    Wenn fwahr (ungleich Null) ist, drucken Sie diese Zeile.

verwandte Informationen