Здравствуйте!
Есть текстовый файл. В нем есть поля такого типа:
0x26e7
0x041a
Для Shell эти поля - не цифра в шестнадцатеричном формате, а строчная переменная.
Мне же необходимо перевести эти поля в десятичный вид.
Т.е., из строки
Keep: 1 Phase: 0x0522 Strength: 25
получить
Keep: 1 Phase: 1314 Strength: 25
???
>[оверквотинг удален]
>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
>
>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+=15if (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*16if (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*16if (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
##########################
>Для Shell эти поля - не цифра в шестнадцатеричном формате, а строчная
>переменная.Если в качестве shell - bash, то вам поможет $(( )):
echo $((0x33))
51