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

letters=(0 A B C D E F G H I J K L M N O)
i=1
while [ ${i} -le 15 ]
do
  mkdir ${i}
  touch ${i}/${letters[${i}]}
  (( i++ ))
done

Пояснение: буквы массив, содержащий буквы, соответствующие числам. Первая запись в массиве имеет индекс 0. Поскольку ваши числа начинаются с 1, я помещаю символ заполнения. Как бы то ни было, не имеет значения

, пока i изменяет значение от 1 до 15, он выполнит команду mkdir с i именем каталога.

затем внутри каждого каталога он создаст файл, имя которого будет соответствующей буквой, из букв массива

3
23.01.2019, 14:07
2 ответа

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

-n
By default, the column command will merge multiple adjacent delimiters into a single delimiter when using the -t option; this option disables that behavior. This option is a Debian GNU/Linux extension.

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

Выход:

a  b  c
d     f

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

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

Для тех, у кого нет столбца 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     -
0
27.01.2020, 21:15

Теги

Похожие вопросы