The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Преобразование формата"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

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

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Преобразование формата"  
Сообщение от А (??) on 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Преобразование формата"  
Сообщение от nel (??) on 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
##########################

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

echo $((0x33))
51

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру