2017-05-24 7 views
-1

In einer Datei in Linux Ich habe jetzt die folgendeWie teilt man eine Datei basierend auf einem Muster in zwei Dateien auf?

123_test 
234_test 
abc_rest 
cde_rest 
and so on 

Ich möchte Linux zwei Dateien erhalten. Eine, die wie nur Datensätze enthält unter

123_test 
234_test 

und zweite Datei wie unten

abc_rest 
cde_rest 

Ich möchte Dateien aufgeteilt basierend auf, was nach _ wie _test oder _rest

Herausgegeben kommt:

123_test 
234_test 
abc_rest 
cde_rest 
456_test 
fgh_rest 

Wie kann ich das unter Linux erreichen?

Können wir die Split-Funktion verwenden?

+3

Können Sie bitte die Kriterien angeben, nach denen es aufgeteilt werden soll? Zeilen beginnend mit Zahlen gegen Buchstaben? Oder Zeilen, die Test gegen Pause enthalten? –

Antwort

2

Sie können diesen einzelnen awk Befehl zum Spalten verwenden:

awk '{ print > (/_test$/ ? "file1" : "file2") }' file 

Dieser awk Befehl alle Zeilen kopiert, die mit Ziffern file1 und restlichen Zeilen zu file2 starten.

+0

Wird die Datei für jede Zeile überschrieben? Weil es eine einzelne Richtung ist und für jede Linie ausgeführt wird. In diesem Fall sollte es durch >> ersetzt werden und die Datei kann in BEGIN { –

+2

abgeschnitten werden. Nein innerhalb von 'awk' even '>' verhält sich wie '>>', so dass es nicht für jede Zeile neu geschrieben wird. – anubhava

+1

Sie haben Recht. Im Benutzerhandbuch zu gnu awk ist Folgendes angegeben: Wenn diese Art der Umleitung verwendet wird, wird die Ausgabedatei gelöscht, bevor die erste Ausgabe in sie geschrieben wird. Nachfolgende Schreibvorgänge in derselben Ausgabedatei löschen die Ausgabedatei nicht, sondern hängen an sie an. (Dies unterscheidet sich von der Verwendung von Umleitungen in Shell-Skripts.) –

Verwandte Themen