So führen Sie zwei Dateien zeilenweise in Bash zusammen


178

Ich habe zwei Textdateien, von denen jede eine solche zeilenweise Information enthält

file1.txt            file2.txt
----------           ---------
linef11              linef21
linef12              linef22
linef13              linef23
 .                    .
 .                    .
 .                    .

Ich möchte diese Dateien zeilenweise mit einem Bash-Skript zusammenführen, um Folgendes zu erhalten:

fileresult.txt
--------------
linef11     linef21
linef12     linef22
linef13     linef23
 .           .
 .           .
 .           .

Wie kann das in Bash gemacht werden?

Antworten:


271

Sie können verwenden paste:

paste file1.txt file2.txt > fileresults.txt

Wie funktioniert es, wenn ich ein Trennzeichen verwenden möchte?
Teja

8
@ SOaddictpaste -d "\n" * > results.txt
Ostap Maliuvanchuk

pastejede Spalte mit einer Lasche trennt sie, wenn Sie mit der überschreiben -dOption, so dass Sie so etwas wie verwenden können awk, sedusw ... jede Zeile zu formatieren. Beispiel: paste file1.txt file2.txt | awk '{printf "%-61s | %s\n", $1,$2}'... dies ahmt die diff --side-by-sideAusgabe nach)
Yzmir Ramirez

Gute Antwort. Verwenden Sie das für den Job gemachte Werkzeug!
Tony

4
paste -d ""Linien ohne Begrenzer zu verketten, Leerzeichen
Victoria Stuart

20

Hier sind Non-Paste-Methoden

awk

awk 'BEGIN {OFS=" "}{
  getline line < "file2"
  print $0,line
} ' file1

Bash

exec 6<"file2"
while read -r line
do
    read -r f2line <&6
    echo "${line}${f2line}"
done <"file1"
exec 6<&-

11

Versuchen Sie Folgendes.

pr -tmJ a.txt b.txt > c.txt

1
Verwenden Sie auch die Option -s, wenn Sie das Trennzeichen ändern möchten. (+1)
benutzerfreundlich

Die Option J funktioniert unter macOS Mojave nicht, aber Ihr Befehl funktioniert einwandfrei. Vielen Dank.
Ente

8

Prüfen

man paste

möglich gefolgt von einem Befehl wie untabifyodertabs2spaces


Mx-Ersetzungszeichenfolge in Emacs entfernt Tabulatoren, vermutlich Vim, und möglicherweise können dies auch einige andere Texteditoren.
Ben

7
Verwenden Sie die Option -d, um ein anderes Trennzeichen als die Registerkarte anzugeben
Pedru
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.