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
именем каталога.
затем внутри каждого каталога он создаст файл, имя которого будет соответствующей буквой, из букв
массива
Если вы используете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'
Для тех, у кого нет столбца 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 -