Ich habe zwei parallele Dateien mit gleicher Zeilenzahl in zwei Sprachen und plane, diese beiden Dateien zeilenweise mit dem Trennzeichen |||
zusammenzuführen . Die beiden Dateien lauten beispielsweise wie folgt:
Datei A:
1Mo 1,1 I love you.
1Mo 1,2 I like you.
Hi 1,3 I am hungry.
Hi 1,4 I am foolish.
Datei B:
1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
Hi 1,3 Ich habe Durst.
Hi 1,4 Ich bin neu.
Die erwartete Ausgabe sieht so aus:
1Mo 1,1 I love you. ||| 1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. ||| 1Mo 1,2 Ich mag dich.
Hi 1,3 I am hungry. ||| Hi 1,3 Ich habe Durst.
Hi 1,4 I am foolish. ||| Hi 1,4 Ich bin neu.
Ich habe das paste
versucht Befehl wie:
paste -d "|||" fileA fileB
Aber die zurückgegebene Ausgabe enthält nur eine Pipe wie:
1Mo 1,1 I love you. |1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. |1Mo 1,2 Ich mag dich.
Gibt es eine Möglichkeit, jedes Zeilenpaar durch Tripe Pipe |||
zu trennen ?
Akzeptierte Antwort:
Mit POSIX einfügen:
:|paste -d ' ||| ' fileA - - - - fileB
paste
verkettet die entsprechenden Zeilen aller Eingabedateien. Hier haben wir sechs Dateien, fileA
, vier Dummy-Dateien vom Standard in -
, und fileB
.
Die Liste der Trennzeichen enthält ein Leerzeichen, drei Pipes und ein Leerzeichen in dieser Reihenfolge, die von paste
verwendet werden kreisförmig.
Für die erste Zeile von sechs Dateien, fileA
wird mit der ersten Dummy-Datei verkettet (die dank des no-op :-Operators nichts ist), erzeuge line1-fileA<space>
.
Die erste Dummy-Datei wird mit der zweiten durch eine Pipe verkettet, erzeugt line1-fileA |
, dann die zweite Dummy-Datei mit der dritten Dummy-Datei, erzeugt line1-fileA ||
, die dritte Dummy-Datei mit der vierten Dummy-Datei, erzeugt line1-fileA |||
.
Und die vierte Dummy-Datei mit fileB
, erzeuge line1-fileA ||| line1-fileB
.
Diese Schritte werden für alle Zeilen wiederholt und geben Ihnen das erwartete Ergebnis.
Die Verwendung von :|
ist für weniger Tippen und wird hauptsächlich in der interaktiven Shell verwendet. In einem Skript sollten Sie Folgendes verwenden:
</dev/null paste -d ' ||| ' fileA - - - - fileB
um zu verhindern, dass eine Unterschale gespawnt wird.