Was ist der einfachste / schnellste Weg, um die Zeilen von zwei (oder mehr) Textdateien zu verschachteln? Beispiel:
Datei 1:
line1.1
line1.2
line1.3
Datei 2:
line2.1
line2.2
line2.3
Interleaved:
line1.1
line2.1
line1.2
line2.2
line1.3
line2.3
Sicher ist es einfach, ein kleines Perl-Skript zu schreiben, das beide öffnet und die Aufgabe erledigt. Aber ich habe mich gefragt, ob es möglich ist, mit weniger Code davonzukommen, vielleicht einem Einzeiler mit Unix-Tools?
paste
ist die Anzahl der Eingabedateien begrenzt. Unter Solaris können maximal 12 Eingabedateien verwendet werden, und die Ausgabezeilen sind auf 511 Zeichen begrenzt.paste -d '\n' <(find /) <(find /)
und erkennen Sie, wie viel besser dies ist, als zuerst die Ergebnisse in jeder Hinsicht in eine Datei zu schreiben, Festplattennutzung, Speichernutzung, Parallelisierung, Abbrechbarkeit ...paste
! Zurück zu 1979 mit AT & T UNIX 32v . Gut gemacht, Sir.Hier ist eine Lösung mit
awk
:erzeugt diese Ausgabe:
Die Verwendung
awk
kann nützlich sein, wenn Sie der Ausgabe zusätzliche Formatierungen hinzufügen möchten, z. B. wenn Sie jede Zeile anhand der Datei beschriften möchten, aus der sie stammt:erzeugt diese Ausgabe:
Hinweis: In diesem Code wird davon ausgegangen, dass Datei1 größer oder gleich lang ist wie Datei2.
Wenn Datei1 mehr Zeilen als Datei2 enthält und Sie nach Abschluss leere Zeilen für Datei2 ausgeben möchten, fügen Sie dem getline-Test eine else-Klausel hinzu:
oder
quelle
Die Antwort von @ Sujoy weist in eine nützliche Richtung. Sie können Zeilennummern hinzufügen, sortieren und die Zeilennummern entfernen:
Beachten Sie (für mich von Interesse), dass dies etwas mehr Arbeit erfordert, um die richtige Reihenfolge zu erreichen, wenn Sie anstelle von statischen Dateien die Ausgabe von Befehlen verwenden, die möglicherweise langsamer oder schneller als die anderen ausgeführt werden. In diesem Fall müssen Sie zusätzlich zu den Zeilennummern ein weiteres Tag hinzufügen / sortieren / entfernen:
quelle
Hier ist eine GUI-Methode: Fügen Sie sie in zwei Spalten in einer Tabelle ein, kopieren Sie alle Zellen heraus und ersetzen Sie Tabulatoren durch reguläre Ausdrücke durch Zeilenumbrüche.
quelle
Hier wird angegeben, dass der Separator "." Ist. und dass wir nach dem ersten Zeichen des zweiten Feldes sortieren.
quelle
man sort
Für mehr Information.