2017-05-18 6 views
0

Brauchen Sie einen schnellen Linux-Tipp.Dateien auf Linux basierend auf Mustern teilen

Ich habe eine Datei, während Stapel mit mehreren Datensätzen haben.

Wie

123 HDR 098 LLK 
blah 
blah 
blah 

456 HDR 098 LLK 
blah 
blah 
blah 
789 HDR 098 LLK 

blah 
blah 
blah 

Ich brauche dies aus "HDR" (einschließlich) bis zum nächsten HDR (nicht inklusive) in mehrere Dateien aufgeteilt werden.

Auf diese Weise, wenn ich 100 Batch in der Datei habe, muss ich dies in 4 Dateien 25 jeweils teilen.

+0

Bei StackOverflow geht es darum, Menschen dabei zu helfen, ihren Programmiercode zu korrigieren. Anfragen nach kostenlosen Codierungsdiensten, Tutorials, Recherchen, Tools, Empfehlungen, Bibliotheken und Code sind nicht Thema. *** Bitte *** lesen http://stackoverflow.com/help/how-to-ask, http://stackoverflow.com/help/dont-ask, http://stackoverflow.com/help/mcve und Nimm die [Tour] (http://stackoverflow.com/tour), bevor du hier mehr Qs postest. Zeig uns deinen Code! Viel Glück. – shellter

Antwort

2

awk zur Rettung!

awk '/HDR/{c++} {print > FILENAME"_"c }' file 

oder allgemein, für n = 3 n Muster in einer geteilten Datei, zum Beispiel zu bekommen.

awk -v n=3 '/HDR/{k=int(c/n)+1; c++} {print > FILENAME"_"k }' file  
+0

Das ist eine großartige ... gleich Split @ Karakfa. Ich hatte eine Ahnung awk wird zur Rettung kommen. Wie kann ich dies auf eine Zählung meiner Wahl ausdehnen? sagen x Anzahl der Chargen in einer Datei. –

+0

Es ist abhängig vom Inhalt, Sie erhalten so viele geteilte Dateien wie die Anzahl der Muster in der Datei. Oder fragen Sie vielleicht etwas anderes? – karakfa

+0

Wir sind sehr nah dran. Ich frage, ob wir sie nun in 5 Muster-Übereinstimmungen gruppieren und dann in eine Datei schreiben können. So etwas wie awk '/ HDR/{c + 5} {print> DATEINAME "_" c}' Datei, als würde ich nicht in die gespaltene Datei schreiben, bis eine bestimmte Anzahl von Übereinstimmungen gefunden wurde. –

Verwandte Themen