Tabelle mit leeren Spalten für aufeinanderfolgende Trennzeichen drucken

Tabelle mit leeren Spalten für aufeinanderfolgende Trennzeichen drucken

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 columnoder 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 columneinfü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     -

verwandte Informationen