NAWK conversion of hexadecimal input to decimal output via printf, I am close I can feel it


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting NAWK conversion of hexadecimal input to decimal output via printf, I am close I can feel it
# 1  
Old 04-03-2012
NAWK conversion of hexadecimal input to decimal output via printf, I am close I can feel it

I have searched and the answers I have found thus far have led me to this point, so I feel I am just about there.

I am trying to convert a column of hexadecimal to decimal values so that I can filter out via grep just the data I want. I was able to pull my original 3 character hex value and append 0x to the front but the printf statement seems not to work to convert it to decimal. I dumped my output to a file and have been trying to get it to convert so I can proceed on.

Here are the last lines snipped from my file, as it it large:


Code:
0x0C0,###0,33,6291
0x011,###1,59,0
0x009,###0,59,362147
0x011,###2,59,260
0x00E,###2,59,1051
0x008,###1,33,0
0x034,###2,59,0
0x001,###3,59,208
0x00E,###2,33,52
0x034,###2,33,0
0x00F,###1,59,0
0x009,###0,33,33022

From the shell prompt I tried:

Code:
printf  "%d\n" 0x03E

and get the proper output:

62

If I type:

Code:
cat <file>|nawk -F, '{printf "%d\n" , $1}'

I get nothing but zeroes as output:


Code:
0
0
0
0
0
0
0
0
0


I tested via:

Code:
cat <file>|nawk -F, '{$1,"     ""%d\n",$1}'

and my output has the correct output from $1, but "%d\n" won't output the decimal equivalent:


Code:
0x0C0     0
0x011     0
0x009     0
0x011     0
0x00E     0
0x008     0
0x034     0
0x001     0
0x00E     0
0x034     0
0x00F     0
0x009     0



So what am I missing? I have had it suggested that printf is different in awk than in the shell but that seemed wrong from what I read.

Last edited by PCGameGuy; 04-03-2012 at 07:20 PM.. Reason: Edited for clarity
# 2  
Old 04-03-2012
Please post what Operating System and version you are running and what Shell you have.
I may not be able to help with the solution, but this basic information will help other posters.

Re-reading the original post it is hard to work out what you are trying to achieve.
Please post sample input data, sample matching output data and a brief description of the process.
# 3  
Old 04-03-2012
SunOS, looks like 5.10? Running on a Sparc Netra-240. Let me clean up my post to clarify input > process > output. Thank you.

Oh and I am in zsh for editing but I can't guarantee what a user will be in so I try to keep it good for basic sh.

Last edited by PCGameGuy; 04-03-2012 at 07:19 PM..
# 4  
Old 04-03-2012
awk/nawk don't have native support for hexadecimal.

Code:
function parsehex(V,OUT)
{
    if(V ~ /^0x/)  V=substr(V,3);

    for(N=1; N<=length(V); N++)
        OUT=(OUT*16) + H[substr(V, N, 1)]

    return(OUT)
}

BEGIN { for(N=0; N<16; N++)
        {  H[sprintf("%x",N)]=N; H[sprintf("%X",N)]=N } }

{ print parsehex($1) }

This User Gave Thanks to Corona688 For This Post:
# 5  
Old 04-03-2012
Thank you for the reply, I am glad it was awk/nawk and not me this time. Smilie Now to take your code and figure out how to make it work for me!
# 6  
Old 04-03-2012
Lateral thought.
Have you considered converting the search number in question to matching format hexadecimal and then using grep rather than converting all the hexadecimal values in the large file to decimal?
This User Gave Thanks to methyl For This Post:
# 7  
Old 04-03-2012
Quote:
Originally Posted by methyl
Lateral thought.
Have you considered converting the search number in question to matching format hexadecimal and then using grep rather than converting all the hexadecimal values in the large file to decimal?
Heh, that is actually what I have been pondering pretty heavily as an alternative actually. Smilie

My suggestion that end users learn hexadecimal before touching my script was denied, sadly.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Convert hexadecimal value to decimal value

Hi All, cat filename | awk '{print $1, $2, $4, $5, $6, $7, $8, $9, $10;}' | awk 'NF > 0' OUTPUT: 2015-01-19 00:12:32 00000000fbfa0000 000000009ae5cf80 014d 015d 0017 003c 0362de20 2015-01-19 00:13:52 00000000fc820000 00000000994c6758 014c 015d 000b 003c 08670250 2015-01-19 00:14:25... (12 Replies)
Discussion started by: sam@sam
12 Replies

2. Shell Programming and Scripting

Conversion from Hexadecimal to binary

How can I convert hexadecimal values to Binary from the second field to the end Input: WS-2 23 345 235 DT-3 45 4A3 000 pp-2 76 300 E4 Output: WS-2 100011 1101000101 1000110101 DT-3 1000101 10010100011 000 pp-2 1110110 1100000000 11100100 (16 Replies)
Discussion started by: aydj
16 Replies

3. Shell Programming and Scripting

Hexadecimal to Binary conversion

Hi Guys, Is it possible to convert the hexadecimal to Binary by unix command.....I could not figure out.... If I need to convert AF6D to binary...what could be the way to do? Thanks in advance!! ---------- Post updated at 02:57 AM ---------- Previous update was at 02:42 AM ---------- I... (6 Replies)
Discussion started by: Indra2011
6 Replies

4. Shell Programming and Scripting

Printf question: getting padded zero in decimal plus floating point together.

Hi Experts, Quick question: I am trying to get the output with decimal and floating point but not working: echo "20.03" | awk '{printf "%03d.2f\n" , $0 }' 020.2f How to get the output as : 020.03 Thank you. (4 Replies)
Discussion started by: rveri
4 Replies

5. Shell Programming and Scripting

Convert hexadecimal value in decimal value

hi all, this is my script: #! /bin/sh minutes=$( { i2cget -f -y 0 0x51 3; } 2>&1 ) minutes=${minutes:2} hour=$( { i2cget -f -y 0 0x51 4; } 2>&1 ) hour=${hour:2} day=$( { i2cget -f -y 0 0x51 5; } 2>&1 ) day=${day:2} month=$( { i2cget -f -y 0 0x51 7; } 2>&1 ) month=${month:2} ... (6 Replies)
Discussion started by: enaud
6 Replies

6. Shell Programming and Scripting

printf Hexadecimal output

printf "%X\n" "A" 41 printf "%X\n" "2" 2 Expected 32 (not 2). Is there a "printf" which will output the hexadecimal value of a numeric character? (9 Replies)
Discussion started by: methyl
9 Replies

7. Shell Programming and Scripting

[bash]printf octal instead of decimal

Hello everybody, I would like to understand why the printf function is returning me an octal value with this command : printf %4.4d 0010 returns 0008 printf %4.4d 10 returns 0010 Thanks for help. (3 Replies)
Discussion started by: dolphin06
3 Replies

8. UNIX for Dummies Questions & Answers

Hexadecimal to Decimal

Hi all, I have a small script to convert my HexaDecimal Input to Decimal as output. #!/bin/ksh hd=00208060 dec=`printf %d $hd` echo $dec Output of the above program: printf: 00208060 not completely converted 16 But my expected output is "2130016". How can i acheive this. I... (2 Replies)
Discussion started by: Arunprasad
2 Replies

9. Shell Programming and Scripting

Decimal to Hexadecimal conversion

Hi frnds :) I need a small help... I have a very long file containing 20 digits decimal number which i want to convert into the corresponding 16 digit hexadecimal values. File looks like.... 11908486672755551741 05446378739602232559 04862605079740156652 . . . I tried the script for i... (7 Replies)
Discussion started by: vanand420
7 Replies

10. UNIX for Dummies Questions & Answers

Convert hexadecimal to decimal base

Hello ! Does anyone knows how can I convert hexadecimal to decimal base in the ksh or csh script ?? Thanks ! Witt (1 Reply)
Discussion started by: witt
1 Replies
Login or Register to Ask a Question