Force leading zeros in echo of base conversion

Недавно возникла такая же проблема. Форумы Kali показывают решение на самом деле . Нажмите «Назад», затем «Да» (чтобы пропустить шаг настройки диспетчера пакетов), а затем, после входа в систему, просто обновите через терминал.

1
01.11.2016, 19:00
3 ответа

Используйте printf для форматирования чисел:

for i in $( seq 1 242 ) ; do
    printf '%05d\n' $( bc <<< 'obase=3; '$i )
done | sed  's/\(.\)/\1 /g'

Кроме того, не нужно помещать пустую строку после $i и не нужно определять количество {1} в регулярном выражении.

Возможно, быстрее использовать раскрытие скобок в zsh, ksh93, bash или yash -o braceexpand:

printf '%s\n' {0..2}\ {0..2}\ {0..2}\ {0..2}\ {0..2}
5
27.01.2020, 23:14

Цикл на самом деле не нужен, поэтому я бы сделал это так:

( echo "obase=3"; seq 1 242 ) |
    bc |
    sed -e 's!^!00000!' -e 's!^0*\(.....\)$!\1!' -e 's!.!& !g'

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

1
27.01.2020, 23:14

С zsh или ksh93 вы также можете сделать:

typeset -i3 i
for ((i = 1; i <= 242; i++)) { printf '%05d\n' "${i#*#}"; }

С ksh93:

printf '%05..3d\n' {1..242}

С zsh:

for ((i = 0; i <= 242; i++)) printf '%05d\n' $(([##3]i))

Направьте их все в sed 's/./& /;s/ $//' (или sed 's/./ &/2g' с помощью GNU sed), чтобы вставить пробелы между цифрами. Или с помощью zsh:

for ((i = 0; i <= 242; i++)) print ${(s::)${(l:5::0:)$(([##3]i))}}
0
27.01.2020, 23:14

Теги

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