Как дополнить нулями последовательность целых чисел в 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
Как сделать паузу в shell-скрипте на одну секунду перед продолжением?
Как получить пароль из оболочки без вывода в терминал?
Сохранение многоточечных выводов в переменную Bash
Расширение переменных внутри одинарных кавычек в команде Bash