Распечатать таблицу с пустыми столбцами для последовательных разделителей

Распечатать таблицу с пустыми столбцами для последовательных разделителей

Я обычно использую columnдля преобразования входных данных в таблицу, например:

$ echo 'a\tb\tc\nd\te\tf' | column -t -s $'\t'
a  b  c
d  e  f

Однако он сворачивает пустые столбцы, например:

$ echo 'a\tb\tc\nd\t\tf' | column -t -s $'\t'
a  b  c
d  f

Вместо того, чтобы печатать пустой столбец, когда есть последовательные разделители. Вот что я хотел бы, используя columnили иначе:

a  b  c
d     f

решение1

Если вы используете GNU column:


По умолчанию команда column объединяет несколько смежных разделителей в один разделитель при использовании опции -t; эта опция отключает такое поведение. Эта опция является расширением Debian GNU/Linux.

printf 'a\tb\tc\nd\t\tf\n'  | column -t -n -s $'\t'

Выход:

a  b  c
d     f

Если GNU columnон недоступен, вы можете использовать sed для добавления пробела (или чего-то другого, например -, ) между вкладками:

printf 'a\tb\tc\nd\t\tf\n'  | sed -e ':loop; s/\t\t/\t-\t/; t loop' | column -t -s $'\t'

решение2

Я не смог найти опцию -n в моей версии команды column, поэтому исправил ее с помощью sed:

echo -e 'a\tb\tc\nd\t\tf' | sed 's/\t\t/\t \t/'| column -t -s $'\t'

решение3

Для тех, у кого нет столбца GNU (например, MacOS): будьте внимательны с первым и последним столбцом.Если первый столбец не самый длинный, то был бы сдвиг. Цикл в скрипте, похоже, не нужен. Предлагаю следующую трубу:| 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     -

Связанный контент