6

Как дополнить нулями последовательность целых чисел в bash, чтобы все имели одинаковую ширину?

1

Я столкнулся с проблемой, связанной с циклом значений в Bash. У меня есть следующий код:

for i in $(seq $first $last)
do
    # здесь выполняются какие-то действия
done

Мне нужно, чтобы переменные $first и $last были с фиксированной длиной в 5 символов. Например, если я введу 1, то мне нужно, чтобы это значение стало 00001 путем добавления нулей спереди. Цикл должен продолжаться до 99999, но длина должна оставаться равной 5.

Вот несколько примеров: 00002, 00042, 00212, 12312 и так далее.

Подскажите, как я могу это реализовать?

5 ответ(ов)

10

В вашем конкретном случае, вероятно, проще всего использовать флаг -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.

2

Да, еще проще можно сделать так:

for i in {00001..99999}; do
  echo $i
done

Этот код создает цикл, который перебирает числа от 00001 до 99999 и выводит каждое из них на экран. Использование фигурных скобок позволяет легко генерировать диапазон чисел с ведущими нулями.

1

Если вам нужно, чтобы конец последовательности имел максимальную длину нулями слева (например, если вы хотите 5 цифр и команда seq 1 10000), вы можете использовать флаг -w для команды seq — он добавляет необходимое количество нулей автоматически.

Пример команды:

seq -w 1 10

И она выдаст следующий вывод:

01
02
03
04
05
06
07
08
09
10

Таким образом, все числа будут дополнены до одинаковой длины.

1

Для форматирования чисел с использованием функции printf в стиле, который вы указали, можно использовать следующий синтаксис:

printf "%05d" 1

В этом примере %05d означает, что число будет выведено как десятичное целое, дополненное нулями слева до длины 5 символов. Таким образом, если вы передадите число 1, вывод будет 00001.

Если вам нужно напечатать другое число, просто замените 1 на нужное значение, и printf автоматически отформатирует его по тому же принципу.

0

Вы можете использовать команду printf, чтобы вывести число с Leading Zeros (ведущими нулями). Вот как это можно сделать:

printf "%05d\n" 1

Этот пример выводит 00001, где %05d указывает на то, что нужно вывести целое число (d), дополненное нулями до общей ширины в 5 символов.

Вот еще один пример:

printf "%05d\n" 2

Этот код выведет 00002. Таким образом, просто используйте printf с нужным вам форматом для достижения желаемого результата.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь