URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9709
[ Назад ]

Исходное сообщение
"Вопрос по bash"

Отправлено Raven , 25-Июл-13 17:04 
Есть такая строчка на bash.  
for i in `seq 0  32`;    do    echo "obase=2; $i" | bc; done
Результат его выполнения
1
10
11
100
101
и т.д.

Вопрос - есть ли какой-то простой способ вывести результат в таком виде?
AAAAA
AAAAB
AAABA
AAABB
и т.д.


Содержание

Сообщения в этом обсуждении
"Вопрос по bash"
Отправлено Аноним , 25-Июл-13 18:11 
Ну совсем не думая можно так:

for i in `seq 0 32`; do echo "obase=2; $i" | bc; done | awk '{printf "%07d\n", $0}' | tr "01" "AB"


"Вопрос по bash"
Отправлено Raven , 25-Июл-13 18:23 
Спасибо.

"Вопрос по bash"
Отправлено stereoPANDA , 25-Июл-13 18:40 
for i in `seq 0  32`;    do    echo "obase=2; $i" | bc; done | awk '{if(length($1)==1) print "0000"$1 } {if(length($1)==2) print "000"$1} {if(length($1)==3) print "00"$1}  {if(length($1)==4) print "0"$1} {if(length($1)==5) print $1}' | tr '01' 'AB'

я добавил момент, что в ответе в каждой строчке - 5 символов, я наивно полагал, что топикстартеру это принципиально. ААА!!!1Я ИДИОТ, УБЕЙТЕ МЕНЯ КТО-НИБУДЬ!!!1


"Вопрос по bash"
Отправлено Pahanivo , 26-Июл-13 08:04 
это просто какой-тааа бинарный мазахизм ...

"Вопрос по bash"
Отправлено sn , 26-Июл-13 16:00 

> я добавил момент, что в ответе в каждой строчке - 5 символов,
> я наивно полагал, что топикстартеру это принципиально. ААА!!!1Я ИДИОТ, УБЕЙТЕ МЕНЯ
> КТО-НИБУДЬ!!!1

for i in `seq 0  32`;    do    echo "obase=2; $i" | bc | tr "01" "AB"; done
Так проще)


"Вопрос по bash"
Отправлено stereoPANDA , 26-Июл-13 16:10 
>> я добавил момент, что в ответе в каждой строчке - 5 символов,
>> я наивно полагал, что топикстартеру это принципиально. ААА!!!1Я ИДИОТ, УБЕЙТЕ МЕНЯ
>> КТО-НИБУДЬ!!!1
> for i in `seq 0  32`;    do  
>   echo "obase=2; $i" | bc | tr "01" "AB";
> done
>  Так проще)

Читаем условие задачи, особенно это:
Вопрос - есть ли какой-то простой способ вывести результат в таком виде?
AAAAA
AAAAB

То есть, в выводе все поля должны содержать 5 символов.
Ваше блестящее решение этого не предусматривает, оно делает tr и всё.


"Вопрос по bash"
Отправлено Pahanivo , 26-Июл-13 17:56 
>>> я добавил момент, что в ответе в каждой строчке - 5 символов,
>>> я наивно полагал, что топикстартеру это принципиально. ААА!!!1Я ИДИОТ, УБЕЙТЕ МЕНЯ
>>> КТО-НИБУДЬ!!!1
>> for i in `seq 0  32`;    do
>>   echo "obase=2; $i" | bc | tr "01" "AB";
>> done
>>  Так проще)
> Читаем условие задачи, особенно это:
> Вопрос - есть ли какой-то простой способ вывести результат в таком виде?

Вот как раз если внимательно читать условие, то как вы
1
10
11
100
101
и т.д.
выведите в указанном виде ))
100000 в таком виде уже не вывести ))


> AAAAA
> AAAAB
> То есть, в выводе все поля должны содержать 5 символов.
> Ваше блестящее решение этого не предусматривает, оно делает tr и всё.


"Вопрос по bash"
Отправлено Raven , 28-Июл-13 11:20 
>[оверквотинг удален]
> 11
> 100
> 101
> и т.д.
> выведите в указанном виде ))
> 100000 в таком виде уже не вывести ))
>> AAAAA
>> AAAAB
>> То есть, в выводе все поля должны содержать 5 символов.
>> Ваше блестящее решение этого не предусматривает, оно делает tr и всё.

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



"Вопрос по bash"
Отправлено михалыч , 29-Июл-13 09:39 
>[оверквотинг удален]
>> 101
>> и т.д.
>> выведите в указанном виде ))
>> 100000 в таком виде уже не вывести ))
>>> AAAAA
>>> AAAAB
>>> То есть, в выводе все поля должны содержать 5 символов.
>>> Ваше блестящее решение этого не предусматривает, оно делает tr и всё.
> Наверное, моя вина, что я не полностью сформулировал задачу. Чтобы избежать споров,
> скажу, что нужно было только дописать нули в начало.

То есть, нужно было получить на выходе
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
Так, что ли, если я правильно понял смысл последнего?
Ну так и спрашивайте, конкретно, а не окольными путями, а то народ вас не поймет. ))
Я дико извиняюсь за некоторый некрофилизм.))
Немного подправив вышеприведённые примеры, получим через логарифм такой полууниверсальный вариант:

#!/bin/sh
#(2,4,8,16,32,64... etc)
it=16
for i in $(seq 0 $it); do echo "obase=2; $i" | bc; done | awk '{lg=log('$it')/log(2)+1; printf "%0"lg"d\n", $0}'

справедливо для
obase=2  (bin)
если obase
obase=16 (hex)
obase=10 (dec)
obase=8  (oct)
то и основание логарифма нужно менять, с вытекающими отсюда..


"Вопрос по bash"
Отправлено Аноним , 29-Июл-13 17:30 
>>[оверквотинг удален]

ППЦ!!!

_правильный_ ответ (в вмысле не рыбы но удочки) был дав во ___2___ посте.
И уже 33 поста - пелекдадывание яиц из левого кармана в правый и обратно.
Баб себе найдите придурки :)