Wie spalte ich nicht kolumnierte Eingaben wie ls
folgt ein?
ls
erstellt eine optimierte Tabelle mit einer Mindestbreite für jede Zeile, zum Beispiel:
ls
2 dsao file with space with
5 e g wsdl-rubo-6cb0f1a9086e80c
d file leading space
Wenn ich jedoch eine Ausgabe einspeise column
(z. B. jede Datei in einer Zeile), wird jede Zeile mit der gleichen Breite aufgefüllt, sodass sie zur Bildschirmbreite passt:
for i in *; do echo "$i"; done | column
2 file with space
5 g
d leading space
dsao with
e wsdl-rubo-6cb0f1a9086e80c
file
(Ich verwende hier nur die Dateiliste, um die gleiche Ausgabe wie im Beispiel zu generieren. Ich suche nach einer solchen Lösung, um am Ende andere Dinge zu kolumnieren.)
Wie kann ich eine Ausgabe mit einer variablen Spaltenbreite kolunisieren?
column -c
_n
-x " zu spalten, aber die Ausgabe in so wenige Bildschirmspalten wie möglich einzupassen, anstatt die angegebene Breite auszufüllen ". Ist das richtig?ls
schafft). Vielleicht finden wir die Lösung, wenn wir uns den Quellcode des Quellcode desls
Befehls in coreutilsAntworten:
Danke @ rubo77, dass du das gefragt hast, es ist eine großartige Übung. Für mich war es ein Fehler, was Englisch ist. Tough Stuff ist ein verpatzter Rhythmus: Es hat Spaß gemacht, schnell, obwohl der Algorithmus selbst hier ziemlich einfach ist.
[endgültige Bearbeitung: verschoben nach https://github.com/jthill/columnate/blob/master/columnate , Fehler behoben, Zeilenmajor implementiert. ]]
quelle
time ls | sort | columnate COLUMNS=$COLUMNS
Etwas in der Nähe der Ausgabe von
ls
:quelle