
Ich verwende es normalerweise column
, um Eingaben in eine Tabelle umzuwandeln, zB:
$ echo 'a\tb\tc\nd\te\tf' | column -t -s $'\t'
a b c
d e f
Allerdings werden leere Spalten ausgeblendet, z. B.:
$ echo 'a\tb\tc\nd\t\tf' | column -t -s $'\t'
a b c
d f
Anstatt eine leere Spalte zu drucken, wenn aufeinanderfolgende Trennzeichen vorhanden sind, möchte ich Folgendes verwenden column
oder auf andere Weise:
a b c
d f
Antwort1
Wenn du benutzt GNU column
:
-N
Standardmäßig führt der Befehl column mehrere nebeneinander liegende Trennzeichen zu einem einzigen Trennzeichen zusammen, wenn die Option -t verwendet wird. Diese Option deaktiviert dieses Verhalten. Diese Option ist eine Erweiterung für Debian GNU/Linux.
printf 'a\tb\tc\nd\t\tf\n' | column -t -n -s $'\t'
Ausgabe:
a b c
d f
Wenn dies nicht verfügbar ist, können Sie mit sed ein Leerzeichen (oder etwas anderes, z. B. ein ) zwischen den Tabulatoren GNU column
einfügen :-
printf 'a\tb\tc\nd\t\tf\n' | sed -e ':loop; s/\t\t/\t-\t/; t loop' | column -t -s $'\t'
Antwort2
Ich konnte die Option -n in meiner Spaltenbefehlsversion nicht finden und habe das Problem daher mit sed behoben:
echo -e 'a\tb\tc\nd\t\tf' | sed 's/\t\t/\t \t/'| column -t -s $'\t'
Antwort3
Für diejenigen ohne GNU-Spalte (z. B. MacOS): Seien Sie vorsichtig mit der ersten und letzten Spalte.Wenn die erste Spalte nicht die längste ist, es würde eine Verschiebung geben. Die Schleife im Skript schien nicht nötig zu sein. Ich schlage folgende Pipe vor:| sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t
paste \
<(printf "a\nb\nc") \
<(printf "1\n2\n3\n4444\n5\n6") \
<(printf "d\ne\nf\ng\nh\ni\nj\nijkl\nk\nl") \
<(printf "X") \
\
| sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t
a 1 d X
b 2 e -
c 3 f -
- 4444 g -
- 5 h -
- 6 i -
- - j -
- - ijkl -
- - k -
- - l -