Covert Deci to Hex (New to AWK)

Hi, I am very new to awk and would be grateful for your help.

I need to convert a file with details like this,

Wregister( 45676, 0)
Wregister( 55550, 1)
Wregister( 44000, 0)
FlipFlop( 2342, 2)
.
.

to look like this

Wregister(626C, 0)
Wregister(D8FE, 1)
Wregister(ABE0, 0)
FlipFlop( 2342, 2) -----> unchanged,name doesn't start with "Wregister("
.
.

It converts $2 in deci into hex, and then combines the previous $1 and $2 together. The (,) at the end of the numbers is a problematic one for me. It needs to be retained too.

Please help me.

$ more file
Wregister( 45676, 0)
Wregister( 55550, 1)
Wregister( 44000, 0)
FlipFlop( 2342, 2)
$ more file.sh 
#!/bin/sh

while read line; do
  echo "$line" | grep "^Wreg" >/dev/null 2>&1
  if [ "$?" -eq "0" ]; then
     val=`echo "$line" | sed 's/^Wregister*([ ]*\([0-9]*\),.*$/\1/'`
     hex=`echo "obase=16;ibase=10; $val" | bc`
     echo "$line" | sed "s/$val/$hex/"
  else
     echo "$line"
  fi
done < file

exit 0
$ chmod +x ./file.sh
$ ./file.sh > newfile
$ more newfile
Wregister( B26C, 0)
Wregister( D8FE, 1)
Wregister( ABE0, 0)
FlipFlop( 2342, 2)

Cheers
ZB

Hi ZB,

Thanks very much for the help. I realised that you are using "sed" command, but can i do it in awk? and I am running the prog in UNIX.

This is run under "UNIX".

Also; you no doubt could solve this using awk, but why bother if it's already solved using the shell, bc and sed?

Cheers
ZB

nawk -f linda.awk myFile

linda.awk:

BEGIN {
  FS="[(,]"
  OFS=","
}
$1 == "Wregister" {
  $1 = sprintf("%s(%X", $1, $2)
  $2=$3; NF--
}
1

Hi vgersh99,

Thks for the help. I finally applied it succesfully today.

But, here comes another seperate but related problem. This time, I tried to convert from a Hex to Deci number by creating a new script with "%d" on the hex number, but it failed.

I need to convert a file with these,

ABC c001 DEF
ABC c050 EFG
ABC c802 GHI

to

ABC 49153 DEF
ABC 49232 EFG
ABC 51202 GHI

Please help me again.
Thank you!!

nawk -f linda.awk yourFile.txt

linda.awk:

BEGIN {
    for (i = 0; i < 10; i++)
      hex = i
    hex["a"] = hex["A"] = 10
    hex["b"] = hex["B"] = 11
    hex["c"] = hex["C"] = 12
    hex["D"] = hex["d"] = 13
    hex["e"] = hex["E"] = 14
    hex["f"] = hex["F"] = 15
  }

  function dehex(h,  i,x) {
    for (i = 1; i <= length(h); i++)
      x = x*16 + hex[substr(h, i, 1)]
    return x
  }

{
 $2 = dehex($2)
 print
}

CompLangAWK on USENET

Hi, its works perfectly!! Thanks for the help!