Ich möchte zwei Dateien in zwei Spalten drucken – die erste Datei auf der linken Seite und die zweite auf der rechten Seite.
paste
macht das nicht, weil es nur ein Zeichen als Trennzeichen einfügen kann, also wenn die ersten Dateizeilen eine andere Länge haben, wird die Ausgabe verdreht:
$ cat file1
looooooooong line
line
$ cat file2
hello
world
$ paste file1 file2
looooooooong line hello
line world
Wenn es ein Befehl zum Hinzufügen von Leerzeichen wie fmt --add-spaces --width 50
wäre Das Problem wäre gelöst:
$ paste <(fmt --add-spaces --width 50 file1) file2
looooooooong line hello
line world
Aber ich kenne keinen einfachen Weg, dies zu tun.
Wie also mehrere Dateien horizontal zusammenführen und drucken, ohne sie zu verdrehen? Eigentlich möchte ich sie mir nur gleichzeitig ansehen.
UPD: Befehl zum Hinzufügen nachgestellter Leerzeichen existiert (z. B. xargs -d 'n' printf '%-50sn'
)
Aber Lösung wie
$ paste <(add-trailing-spaces file1) file2
funktioniert nicht wie erwartet, wenn Datei1 weniger Zeilen als Datei2 hat.
Akzeptierte Antwort:
Was ist mit paste file{1,2}| column -s $'t' -tn
?
looooooooong line line hello
line world
-
Dies sagt
column
umTab
zu verwenden als Spaltentrennzeichen, wo wir es vonpaste
nehmen Befehl, der dort das Standardtrennzeichen ist, wenn nicht angegeben; allgemein:paste -d'X' file{1,2}| column -s $'X' -tn
wobei
X
bedeutet jedes einzelne Zeichen. Sie müssen diejenige auswählen, die nicht in Ihren Dateien enthalten ist. -
Das
-t
Option wird verwendet, um die Anzahl der Spalten zu bestimmen, die die Eingabe enthält. - Dies fügt keinen langen Tabulator zwischen zwei Dateien hinzu, während andere Antworten dies tun.
-
Dies funktioniert auch dann, wenn in Datei1 leere Zeilen vorhanden waren, und es wird keine zweite Datei im Druckbereich von Datei1 gedruckt , siehe unten Eingabe/Ausgabe
Eingabedatei1:
looooooooong line line
Eingabedatei2:
hello world
Ausgabe:
looooooooong line hello world line