Zusammenführen von Textdateien über die CLI mit Sortierreihenfolge und Stamm

Zusammenführen von Textdateien über die CLI mit Sortierreihenfolge und Stamm

Ich habe eine Reihe von txt-Dateien, jede mit mehreren Einträgen. Normalerweise füge ich alle txt-Dateien mit cat zu einer Ausgabedatei zusammen, allerdings wird das etwas chaotisch, weil ich nicht sicher sein kann, aus welcher ursprünglichen txt-Datei sie stammt.

Ich habe mich gefragt, ob es eine Möglichkeit gibt, mithilfe der Befehlszeile zunächst alle TXT-Dateien in alphabetischer Reihenfolge zusammenzuführen und gleichzeitig dem Originaleintrag das Suffix hinzuzufügen, um anzugeben, aus welcher Datei er stammt.

Angenommen, ich habe zwei TXT-Dateien mit jeweils drei Einträgen:

Datei_Eins:

  Alpha
  Bravo 
  Charlie

Datei_Zwei:

  Alpha
  Bravo
  Delta

Ich möchte Folgendes tun:

  1. Führen Sie die beiden Listen in einer alphabetisch sortierten Ausgabe-TXT-Datei zusammen.
  2. Fügen Sie das Suffix hinzu, um anzuzeigen, aus welcher Liste es stammt:

       Alpha_File_One
       Alpha_File_Two
       Bravo_File_One
       Bravo_File_Two
       Charlie_File_One
       Delta_File_Two
    

Ist das möglich?

Antwort1

Wie Florian sagt, sollten Sie zuerst den Dateinamen hinzufügen und dann sortieren. Eine andere Methode ist die Verwendung von awk:

$ awk '{printf "%s_%s\n", $0, FILENAME}' f1 f2 | sort
Alpha_f1
Alpha_f2
Bravo_f1
Bravo_f2
Charlie_f1
Delta_f2

printfdruckt Argumente in einem angegebenen Format, %s_%s\nd. h. zwei Zeichenfolgen, die durch _einen Zeilenumbruch getrennt und von diesem gefolgt werden. $0und enthalten jeweils die aktuelle Zeile und den Dateinamen. In diesem Beispiel FILENAMEhabe ich die Dateien f1und genannt.f2

Antwort2

Sie müssen es andersherum machen: Zuerst das Suffix hinzufügen, dann zusammenführen und sortieren:

(sed 's/$/_File_One/' File_One; sed 's/$/_File_Two/' File_Two) | sort 

verwandte Informationen