
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:
- Führen Sie die beiden Listen in einer alphabetisch sortierten Ausgabe-TXT-Datei zusammen.
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
printf
druckt Argumente in einem angegebenen Format, %s_%s\n
d. h. zwei Zeichenfolgen, die durch _
einen Zeilenumbruch getrennt und von diesem gefolgt werden. $0
und enthalten jeweils die aktuelle Zeile und den Dateinamen. In diesem Beispiel FILENAME
habe ich die Dateien f1
und 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