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
columnumTabzu verwenden als Spaltentrennzeichen, wo wir es vonpastenehmen Befehl, der dort das Standardtrennzeichen ist, wenn nicht angegeben; allgemein:paste -d'X' file{1,2}| column -s $'X' -tnwobei
Xbedeutet jedes einzelne Zeichen. Sie müssen diejenige auswählen, die nicht in Ihren Dateien enthalten ist. -
Das
-tOption 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 lineEingabedatei2:
hello worldAusgabe:
looooooooong line hello world line