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

Исходное сообщение
"Преобразование формата"

Отправлено nel , 15-Ноя-07 13:02 
Здравствуйте!
Есть текстовый файл. В нем есть поля такого типа:
0x26e7
0x041a
Для Shell эти поля - не цифра в шестнадцатеричном формате, а строчная переменная.
Мне же необходимо перевести эти поля в десятичный вид.
Т.е., из строки
Keep: 1 Phase: 0x0522 Strength: 25
получить
Keep: 1 Phase: 1314 Strength: 25
???

Содержание

Сообщения в этом обсуждении
"Преобразование формата"
Отправлено А , 15-Ноя-07 14:51 
>[оверквотинг удален]
>0x26e7
>0x041a
>Для Shell эти поля - не цифра в шестнадцатеричном формате, а строчная
>переменная.
>Мне же необходимо перевести эти поля в десятичный вид.
>Т.е., из строки
>Keep: 1 Phase: 0x0522 Strength: 25
>получить
>Keep: 1 Phase: 1314 Strength: 25
>???

cat file | perl -pe 's|0x([0-9a-z]+)|hex($1)|eig' >new_file
или
perl -pe 's|0x([0-9a-z]+)|hex($1)|eig' file >new_file


"Преобразование формата"
Отправлено nel , 15-Ноя-07 17:42 
>
>cat file | perl -pe 's|0x([0-9a-z]+)|hex($1)|eig' >new_file
>или
>perl -pe 's|0x([0-9a-z]+)|hex($1)|eig' file >new_file

Великое СПАСИБО!

А ведь раньше я делал так:

##########################
awk '{ x=0
       if (substr($4,6,1)==1  ) x+= 1
       if (substr($4,6,1)==2  ) x+= 2
       if (substr($4,6,1)==3  ) x+= 3
       if (substr($4,6,1)==4  ) x+= 4
       if (substr($4,6,1)==5  ) x+= 5
       if (substr($4,6,1)==6  ) x+= 6
       if (substr($4,6,1)==7  ) x+= 7
       if (substr($4,6,1)==8  ) x+= 8
       if (substr($4,6,1)==9  ) x+= 9
       if (substr($4,6,1)=="a") x+=10
       if (substr($4,6,1)=="b") x+=11
       if (substr($4,6,1)=="c") x+=12
       if (substr($4,6,1)=="d") x+=13
       if (substr($4,6,1)=="e") x+=14
       if (substr($4,6,1)=="f") x+=15

       if (substr($4,5,1)==1  ) x+= 1*16
       if (substr($4,5,1)==2  ) x+= 2*16
       if (substr($4,5,1)==3  ) x+= 3*16
       if (substr($4,5,1)==4  ) x+= 4*16
       if (substr($4,5,1)==5  ) x+= 5*16
       if (substr($4,5,1)==6  ) x+= 6*16
       if (substr($4,5,1)==7  ) x+= 7*16
       if (substr($4,5,1)==8  ) x+= 8*16
       if (substr($4,5,1)==9  ) x+= 9*16
       if (substr($4,5,1)=="a") x+=10*16
       if (substr($4,5,1)=="b") x+=11*16
       if (substr($4,5,1)=="c") x+=12*16
       if (substr($4,5,1)=="d") x+=13*16
       if (substr($4,5,1)=="e") x+=14*16
       if (substr($4,5,1)=="f") x+=15*16

       if (substr($4,4,1)==1  ) x+= 1*16*16
       if (substr($4,4,1)==2  ) x+= 2*16*16
       if (substr($4,4,1)==3  ) x+= 3*16*16
       if (substr($4,4,1)==4  ) x+= 4*16*16
       if (substr($4,4,1)==5  ) x+= 5*16*16
       if (substr($4,4,1)==6  ) x+= 6*16*16
       if (substr($4,4,1)==7  ) x+= 7*16*16
       if (substr($4,4,1)==8  ) x+= 8*16*16
       if (substr($4,4,1)==9  ) x+= 9*16*16
       if (substr($4,4,1)=="a") x+=10*16*16
       if (substr($4,4,1)=="b") x+=11*16*16
       if (substr($4,4,1)=="c") x+=12*16*16
       if (substr($4,4,1)=="d") x+=13*16*16
       if (substr($4,4,1)=="e") x+=14*16*16
       if (substr($4,4,1)=="f") x+=15*16*16

       if (substr($4,3,1)==1  ) x+= 1*16*16*16
       if (substr($4,3,1)==2  ) x+= 2*16*16*16
       if (substr($4,3,1)==3  ) x+= 3*16*16*16
       if (substr($4,3,1)==4  ) x+= 4*16*16*16
       if (substr($4,3,1)==5  ) x+= 5*16*16*16
       if (substr($4,3,1)==6  ) x+= 6*16*16*16
       if (substr($4,3,1)==7  ) x+= 7*16*16*16
       if (substr($4,3,1)==8  ) x+= 8*16*16*16
       if (substr($4,3,1)==9  ) x+= 9*16*16*16
       if (substr($4,3,1)=="a") x+=10*16*16*16
       if (substr($4,3,1)=="b") x+=11*16*16*16
       if (substr($4,3,1)=="c") x+=12*16*16*16
       if (substr($4,3,1)=="d") x+=13*16*16*16
       if (substr($4,3,1)=="e") x+=14*16*16*16
       if (substr($4,3,1)=="f") x+=15*16*16*16;
       $4 = x
       print > new_file
     }' file
##########################


"Преобразование формата"
Отправлено jd , 15-Ноя-07 15:56 
>Для Shell эти поля - не цифра в шестнадцатеричном формате, а строчная
>переменная.

Если в качестве shell - bash, то вам поможет $(( )):

echo $((0x33))
51