Extrahieren von Zeilen aus einer großen Textdatei

Extrahieren von Zeilen aus einer großen Textdatei

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 plusund 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'

    awkliest 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 Datei plus.

  • $7=="-"{print>"minus"}

    Wenn das 7. Feld ebenfalls ein ist -, speichern Sie die Zeile in der Datei minus.

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.

verwandte Informationen