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 awk
denen 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 grep
das standardmäßige geteilte @F
Array nach dem Herausschieben der ersten Spalte verwenden:
perl -ane 'shift @F; print unless grep { $_ < 1 } @F' file