2016-07-28 5 views
2

Ich habe eine Datei mit 200.000 Zeilen. Die Linien sind gruppiert. Der Anfang jeder Gruppe von Zeilen beginnt mit "IMAGE", gefolgt von einer Zeile, die mit "HISTO" beginnt und dann mindestens einer, aber in der Regel mehrere Zeilen, die mit "FRAG" beginnen. Ich muss:
1. Löschen Sie jede Zeile, die mit "HISTO" beginnt.
2. Für jede "FRAG" Zeile muss ich es mit der vorherigen "IMAGE" Reihe verbinden. Hier ist ein Beispiel.Join und Löschen von Linien basierend auf Patern

>IMAGE ...data1... 
>HISTO usually numbers 0 0 1 1 0 1 0 
>FRAG ...data1... 
>FRAG ...data2... 
>IMAGE ...data2... 
>HISTO usually numbers 0 0 1 1 0 1 0 
>FRAG ...data1... 
>FRAG ...data2... 
>FRAG ...data3... 
>FRAG ...data4... 

Das Ergebnis muss wie folgt aussehen:

>IMAGE ...data1... FRAG ...data1... 
>IMAGE ...data1... FRAG ...data2... 
>IMAGE ...data2... FRAG ...data1... 
>IMAGE ...data2... FRAG ...data2... 
>IMAGE ...data2... FRAG ...data3... 
>IMAGE ...data2... FRAG ...data4... 

Es ist möglich, viele FRAG Linien zu haben, bevor es mit einer Bildzeile beginnt über. Ich benutze Mac, damit ich so ziemlich jedes Werkzeug benutzen kann.

Ich habe das versucht, aber es kombiniert mehrere FRAG Linien zu einer einzigen IMAGE-Linie.

awk '/^BILD/{wenn (NR> 1) a drucken; a = $ 0}/^ (FRAG)/{a = a“„$ 0}‘Eingabe.txt> output.txt

, die in diesen Ergebnisse:

IMAGE ... data1 .. . FRAG ... data1 ... FRAG ... Daten2 ...

+0

@Inian Ich habe die ursprüngliche Nachricht bearbeitet, um einzuschließen, was ich versucht habe. Zumindest hat es die HISTO-Linie entfernt. Aber es kombiniert die FRAG-Linien, die alles zu einer Reihe machen. –

Antwort

2

Dies funktioniert:

sed 's/>//' Input.txt|awk '/^IMAGE/{a=$0;next;} /^FRAG/{print ">"a,$0}' 

die nächste Anweisung die FRAG Muster zu vermeiden, ist die Überprüfung, ob es sich um eine Linie mit IMAGE und beschleunigt damit die pr Zugang.

Verwandte Themen