Как дополнить нулями последовательность целых чисел в bash, чтобы все имели одинаковую ширину?
Я столкнулся с проблемой, связанной с циклом значений в Bash. У меня есть следующий код:
for i in $(seq $first $last)
do
# здесь выполняются какие-то действия
done
Мне нужно, чтобы переменные $first и $last были с фиксированной длиной в 5 символов. Например, если я введу 1, то мне нужно, чтобы это значение стало 00001 путем добавления нулей спереди. Цикл должен продолжаться до 99999, но длина должна оставаться равной 5.
Вот несколько примеров: 00002, 00042, 00212, 12312 и так далее.
Подскажите, как я могу это реализовать?
5 ответ(ов)
В вашем конкретном случае, вероятно, проще всего использовать флаг -f команды seq, чтобы отформатировать числа при выводе списка. Например:
for i in $(seq -f "%05g" 10 15)
do
echo $i
done
Это приведет к следующему выводу:
00010
00011
00012
00013
00014
00015
Более общо, в bash имеется встроенная команда printf, с помощью которой можно добавлять нули в вывод следующим образом:
$ i=99
$ printf "%05d\n" $i
00099
Вы также можете использовать флаг -v, чтобы сохранить вывод в другую переменную:
$ i=99
$ printf -v j "%05d" $i
$ echo $j
00099
Обратите внимание, что printf поддерживает немного другой формат по сравнению с seq, поэтому вам нужно использовать %05d вместо %05g.
Да, еще проще можно сделать так:
for i in {00001..99999}; do
echo $i
done
Этот код создает цикл, который перебирает числа от 00001 до 99999 и выводит каждое из них на экран. Использование фигурных скобок позволяет легко генерировать диапазон чисел с ведущими нулями.
Если вам нужно, чтобы конец последовательности имел максимальную длину нулями слева (например, если вы хотите 5 цифр и команда seq 1 10000), вы можете использовать флаг -w для команды seq — он добавляет необходимое количество нулей автоматически.
Пример команды:
seq -w 1 10
И она выдаст следующий вывод:
01
02
03
04
05
06
07
08
09
10
Таким образом, все числа будут дополнены до одинаковой длины.
Для форматирования чисел с использованием функции printf в стиле, который вы указали, можно использовать следующий синтаксис:
printf "%05d" 1
В этом примере %05d означает, что число будет выведено как десятичное целое, дополненное нулями слева до длины 5 символов. Таким образом, если вы передадите число 1, вывод будет 00001.
Если вам нужно напечатать другое число, просто замените 1 на нужное значение, и printf автоматически отформатирует его по тому же принципу.
Вы можете использовать команду printf, чтобы вывести число с Leading Zeros (ведущими нулями). Вот как это можно сделать:
printf "%05d\n" 1
Этот пример выводит 00001, где %05d указывает на то, что нужно вывести целое число (d), дополненное нулями до общей ширины в 5 символов.
Вот еще один пример:
printf "%05d\n" 2
Этот код выведет 00002. Таким образом, просто используйте printf с нужным вам форматом для достижения желаемого результата.
Как изменить цвет вывода echo в Linux
Как работает "cat << EOF" в bash?
Расширение переменных внутри одинарных кавычек в команде Bash
Как разделить большой текстовый файл на меньшие файлы с равным количеством строк?
Автоматический вход в Docker через Bash-скрипт