Ich habe eine Datei wie folgt aus:Entfernen Reihen in bash basierend auf Werten
1 4014 1.97676 1 1
1 4014 1.97676 2 1
1 4014 1.97676 3 1
1 2014 1.97676 4 1
1 2014 1.97676 5 1
1 401 1.97676 6 1
1 401 1.97676 7 1
1 401 1.97676 8 1
1 14 1.97676 9 1
1 14 1.97676 10 1
Ich möchte diese Datei trimmen: Entfernen Sie Zeilen mit den Werten in der zweiten Spalte < 1000. Nach dem Trimmen sollte die Datei aussehen dies:
1 4014 1.97676 1 1
1 4014 1.97676 2 1
1 4014 1.97676 3 1
1 2014 1.97676 4 1
1 2014 1.97676 5 1
Wie dies in bash zu erreichen? Ich möchte es nicht in Python machen, besonders in Pandas, weil sie langsam mit großen Dateien umgehen.
Eine andere Frage ist: Wie kann ich eine solche bash Befehle in einer .sh-Datei (ähnlich .py-Datei ausgeführt von Python) und führen Sie die Datei im Terminal wie folgt schreiben:
$bash clean_file.sh inputfile.txt > outputfile.txt
Vielen Dank .
Hier ist, was ich tun möchte:
Die Datei ist wie folgt:
NODE_1_length_4014_cov_1.97676 1 1
NODE_1_length_4014_cov_1.97676 2 1
NODE_1_length_4014_cov_1.97676 3 1
NODE_1_length_4014_cov_1.97676 4 1
NODE_1_length_4014_cov_1.97676 5 1
NODE_1_length_4014_cov_1.97676 6 1
NODE_1_length_4014_cov_1.97676 7 1
NODE_1_length_4014_cov_1.97676 8 1
NODE_1_length_4014_cov_1.97676 9 1
NODE_1_length_4014_cov_1.97676 10 1
Ich mag würde reinigen es mit den folgenden Schritten:
#First, split the first column by the delimiter '_' and only keep the numbers:
awk -F '_' -v OFS='\t' '{print $2,$4,$6,$7,$8}'
#Second, remove the last two empty columns, because, after the first step, it generates two extra invisible columns, which need to be removed.
cut -f 1-5
#remove rows with values in the 2nd column less than 500
awk '$2 >= 500 { print }'
Ich habe 'Eingabedatei' und 'Ausgabedatei' nicht hinzugefügt n in den obigen Skripten, da jeder Schritt die Ausgabedatei des vorherigen Schritts als Eingabedatei verwendet. Ich weiß nicht, wie man die drei Schritte in einer Skriptdatei kombiniert und auf der Festplatte speichert. Ich möchte es im Terminal für Dateien ausführen, die an verschiedenen Orten auf meinem Computer gespeichert sind.
Vielen Dank!
'entfernen Sie die letzten zwei leere columns' Sie diesen Schritt nicht brauchen ... die awk Lösung gewesen' awk -F sollte '_' -v OFS = '\ t' ‚{print $ 2, $ 4, $ 6} ' – Sundeep
, um es mit neuer Anforderung zu kombinieren, verwenden Sie' awk-F '_' -v OFS = '\ t' '$ 2> = 500 {print $ 2, $ 4, $ 6}' auf Originaldatei .. nur ein einziger Befehl, keine Notwendigkeit, Skripte zu schreiben – Sundeep
Das ist sehr hilfreich. Vielen Dank! –