
Ich habe eine Textdatei mit Daten, die so aussehen (1875 Zeilen, um genau zu sein)
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 6585538 6585547 0.905022147 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148428 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_6585517
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 6767855 6767864 0.703029237 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148303 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_6768100
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 8686283 8686292 0.481284243 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148085 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_8685906
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 10660924 10660933 0.818294903 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148400 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_10661128
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327417 12327426 0.584010382 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148387 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327433 12327442 0.825226087 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148388 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504
Ich suche nach einer Lösung zum Extrahieren der Zeilen, die ganz am Ende ein „+“ haben. (Das passiert nach dem letzten ;
.) Ebenso versuche ich, die -
Strangzeilen zu extrahieren und in separate Dateien zu speichern.
Edit: Änderung des Datensatzes, hatte mir vorher die falsche Datei angeschaut.
Antwort1
Aus den Kommentaren entnehme ich, dass Sie Zeilen extrahieren möchten, deren 7. Spalte entweder +
oder ist -
. Die Eingabedatei ist tabulatorgetrennt. Um dies zu tun und dabei die +
Zeilen in der Datei mit dem Namen plus
und die Minuszeilen in der Datei mit dem Namen zu speichern minus
, ist das natürlichste Tool wahrscheinlich awk
:
awk -F'\t' '$7=="+"{print >"plus"} $7=="-"{print>"minus"}' file
Wie es funktioniert:
-F'\t'
awk
liest jeweils einen Datensatz (Zeile) ein und trennt ihn in Felder. Hier setzen wir als Feldtrennzeichen einen Tabulator.$7=="+"{print >"plus"}
Wenn das 7. Feld ein ist
+
, dann speichere die Zeile in der Dateiplus
.$7=="-"{print>"minus"}
Wenn das 7. Feld ebenfalls ein ist
-
, speichern Sie die Zeile in der Dateiminus
.
Antwort2
sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile
Gehen Sie für den siebten tabulatorgetrennten Abschnitt wie folgt vor:
sed -ne 'h;s/\([^\t]*\t\)\{6\}[^\t+-]*//
/^-/{g;w minus.file' -e 'b
}; /^+/{g;w plus.file' -e \}
<tab>
Anstelle der oben genannten Escapezeichen müssen Sie jedoch möglicherweise ein Literalzeichen verwenden \t
.