So löschen Sie eine Zeile, wenn auch nur eine Spalte der Zeile einen Wert kleiner als eins hat

So löschen Sie eine Zeile, wenn auch nur eine Spalte der Zeile einen Wert kleiner als eins hat

Ich habe eine Datei mit 7000 Zeilen und 28 Spalten. Wie lösche ich eine Zeile, wenn auch nur eine der 28 Spalten einen Wert kleiner als eins hat?

Ich habe Antworten gefunden, in awkdenen eine Zeile gelöscht wird, wenn eine Spalte angegeben ist.

Ich möchte jedoch die Zeile unabhängig von der Spaltennummer löschen, deren Wert kleiner als eins ist.

Meine Datei liegt im Tabulator-getrennten Format vor.
Beispieldatei

a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       0.9     6       7       4       10

Antwort1

In Awk würden Sie eine Schleife über die Felder (Spalten) ausführen und jedes einzelne testen. Da Ihre Zeilen eine nicht numerische erste Spalte haben, beginnen Sie bei der zweiten ( i=2):

Also

awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' file

Beispiel gegeben

$ cat example
a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       7.96681779026634e-05     6       7       4       10

Dann

$ awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' example
a       1       2       4       7       9
c       3       5       12      7       9

In Perl könnten Sie grepdas standardmäßige geteilte @FArray nach dem Herausschieben der ersten Spalte verwenden:

perl -ane 'shift @F; print unless grep { $_ < 1 } @F' file

verwandte Informationen