Katzendatei1
foo
ice
two
Katzendatei2
bar
cream
hundred
Gewünschte Ausgabe:
foobar
icecream
twohundred
Datei1 und Datei2 haben in meinem Szenario immer die gleiche Anzahl von Zeilen, falls dies die Sache einfacher macht.
Das richtige Werkzeug für diesen Job ist wahrscheinlich paste
paste -d '' file1 file2
Siehe man paste
für weitere Einzelheiten.
Sie können auch den folgenden pr
Befehl verwenden:
pr -TmJS"" file1 file2
woher
-T
Deaktiviert die Paginierung-mJ
m erge Dateien, J oining volle Linien-S""
Trennen Sie die Spalten mit einem leeren String Wenn Sie es wirklich mit einer reinen Bash-Shell machen wollten (nicht empfohlen), dann ist dies das, was ich vorschlagen würde:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(Dies nur, weil das Thema in Kommentaren zu einer anderen vorgeschlagenen Pure-Bash-Lösung auftauchte.)
Durch awk weg:
getline x<"file2"
Liest die gesamte Zeile aus Datei2 und speichert sie in der Variable x .print $0x
druckt die gesamte Zeile aus Datei1 aus, wobei$0
dannx
die gespeicherte Zeile von Datei2 verwendet wird .quelle
paste
ist der Weg zu gehen . Wenn Sie andere Methoden überprüfen möchten, finden Sie hier einepython
Lösung:Wenn Sie nur wenige Zeilen haben:
Beachten Sie, dass bei einer ungleichen Anzahl von Zeilen diese an der letzten Zeile der Datei endet, die zuerst endet.
quelle
Auch mit pure
bash
(beachte, dass dies leere Zeilen völlig ignoriert):quelle
mapfile
, um die Dateien in Arrays einzulesen, oder verwenden Sie eine while-Schleife mit zweiread
Befehlen, die von jedem ihrer Felder lesen.array=( $(cmd) )
oder verwendenarray=( $var )
. Verwenden Siemapfile
stattdessen.Der Perl-Weg, leicht zu verstehen:
Beginnen mit:
Ausgabe:
quelle