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

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

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

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

Например: 00002 , 00042 , 00212 , 012312 и так далее.

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

380
задан Ciro Santilli 新疆改造中心法轮功六四事件 24 July 2015 в 07:01
поделиться

2 ответа

Если вы просто добавляете числа с нулями для достижения фиксированной длины, просто добавьте ближайшее кратное 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
ответ дан 22 November 2019 в 23:55
поделиться

Одним путем, не используя внешнее разветвление процесса является обработка строк, в универсальном случае это было бы похоже на это:

#start value
CNT=1

for [whatever iterative loop, seq, cat, find...];do
   # number of 0s is at least the amount of decimals needed, simple concatenation
   TEMP="000000$CNT"
   # for example 6 digits zero padded, get the last 6 character of the string
   echo ${TEMP:(-6)}
   # increment, if the for loop doesn't provide the number directly
   TEMP=$(( TEMP + 1 ))
done

Это работает вполне хорошо над WSL также, где разветвление является действительно тяжелой операцией. У меня было 110 000 списков файлов, использование printf "%06d" $NUM приняло 1 минуту, решение выше работало приблизительно через 1 секунду.

0
ответ дан 22 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: