GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zwei Dateien Zeile für Zeile mit dem dreifachen Trennzeichen „|||“ zusammenführen?

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.


Linux
  1. Lassen Sie sich mit sort in der Befehlszeile sortieren

  2. Bearbeiten von Text auf der Kommandozeile mit sed

  3. Die Zeichen jeder Zeile mit Wc zählen?

  4. Wie kann man zwei Dateien mit AWK zusammenführen?

  5. wie man zwei Dateien konsistent Zeile für Zeile zusammenführt

Tipps zum Auflisten von Dateien mit ls in der Linux-Befehlszeile

Bearbeiten von Text in der Befehlszeile mit grep

Zeiterfassung mit Timewarrior auf der Kommandozeile

So finden Sie Dateien mit dem fd-Befehl in Linux

Einfache Möglichkeit, Dateien mit dem Cat-Befehl zusammenzuführen

Sicheres Kopieren von Dateien mit dem SCP-Befehl