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!!
linda_h:
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!