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

Мне нужно зациклить некоторые значения,

for i in $(seq $first $last)
do
    does something here
done

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

Например: 00002, 00042, 00212, 012312 и т. Д.

Любая идея о том, как я могу это сделать?

Ответы [ 12 ]

0 голосов
/ 27 июня 2019

Если вы просто добавляете числа с нулями для достижения фиксированной длины, просто добавьте ближайшее к 10 например. для 2 цифр добавьте 10 ^ 2, затем удалите первую 1 перед отображением вывода.

Это решение работает для заполнения / форматирования отдельных чисел любой длины или целой последовательности чисел с использованием цикла for.

# Padding 0s zeros:
# Pure bash without externals eg. awk, sed, seq, head, tail etc.
# works with echo, no need for printf

pad=100000      ;# 5 digit fixed

for i in {0..99999}; do ((j=pad+i))
    echo ${j#?}
done

Протестировано на Mac OSX 10.6.8, Bash ver 3.2.48

0 голосов
/ 07 февраля 2019

1.) Создайте последовательность чисел 'seq' от 1 до 1000 и зафиксируйте ширину '-w' (ширина определяется длиной конечного числа, в данном случае 4 цифры на 1000).

2.) Кроме того, выберите, какие цифры вы хотите, используя 'sed -n' (в этом случае мы выбираем цифры 1-100).

3.) «Эхо» каждого номера.Числа хранятся в переменной 'i', доступ к которой осуществляется с помощью '$'.

Плюсы: Этот код довольно чистый.

Минусы: 'seq' не свойственен всем системам Linux(как я понимаю)

for i in `seq -w 1 1000 | sed -n '1,100p'`; 
do 
    echo $i; 
done
...