oracle raw 转 字符串,[20190930]oracle raw类型转化number脚本.txt

[20190930]oracle raw类型转化number脚本.txt

--//写一个简单oracle raw转化number脚本,简单说明:

--//输入必须是c1,02 或者 c102,不支持c1,2格式。

--//raw2num.sh 脚本放在最后.

--//测试:

$ cat otest.txt | xargs  -n 1 -I {}  bash -c "./raw2num.sh {};echo {} " | paste - -

0       80

1       c1,02

2       c1,03

25      c1,1a

123     c2,02,18

4100    c2,2a

-4100   3d,3c,66

41000000        c4,2a

-41000000       3b,3c,66

132004078       c5,02,21,01,29,4f

2.01    c1,03,02

.3      c0,1f

.00000125       be,02,1a

115.200003      c2,02,10,15,01,04

-.00000125      41,64,4c,66

-.3     3f,47,66

-1      3e,64,66

-5      3e,60,66

-20032  3c,63,65,45,66

-234.432        3d,63,43,3a,51,66

999999999999999999999999999999999999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000  ff,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64

-999999999999999999999999999999999999990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02

.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001     80,02

-.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001    7f,64,66

123456789012345678901234567890123456789000      d5,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b

-123456789012345678901234567890123456780000     2a,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b

.123456789012345678901234567890123456789        c0,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b

-.12345678901234567890123456789012345678        3f,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b

$ cat otest.txt

80

c1,02

c1,03

c1,1a

c2,02,18

c2,2a

3d,3c,66

c4,2a

3b,3c,66

c5,02,21,01,29,4f

c1,03,02

c0,1f

be,02,1a

c2,02,10,15,01,04

41,64,4c,66

3f,47,66

3e,64,66

3e,60,66

3c,63,65,45,66

3d,63,43,3a,51,66

ff,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64

00,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02

80,02

7f,64,66

d5,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b

2a,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b

c0,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b,0d,23,39,4f,5b

3f,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b,59,43,2d,17,0b

$ cat raw2num.sh

#! /bin/bash

#! oracle raw convert number

odebug=${ODEBUG:-0}

# process input parameter ,delete 0x and "," and all spaces. save to variable v_raw. and its length to variable v_len.

v_raw="$*"

v_raw=${v_raw//0x/}

v_raw=${v_raw//[, ]/}

v_len=${#v_raw}

v_tmp=$(( $v_len % 2 ))

if [ $v_tmp -ne 0 -o $v_len -gt 42 ]; then

echo "$v_raw is illegal! v_len=$v_len or length of v_len>42"

exit 2

fi

if [ $odebug -eq 1 ] ; then

echo v_ram="$v_raw"

fi

if [ "$v_raw" == "80" ]; then

result=0

echo "$result"

exit 0

elif [ "$v_raw" \> "80" ]; then

v_res="0."

v_exp=$(printf "%2d" $(( "0x"${v_raw:0:2} - 0xc0 )))

if [ $odebug -eq 1 ] ; then

echo v_ram="$v_raw" v_exp="$v_exp" v_len="$v_len"

fi

for ((i=2;i

do

v_tmp=$(printf "%02d" $(( "0x"${v_raw:i:2} -0x1 )))

if [ $v_tmp -lt 0 -o $v_tmp -gt 99 ]; then

echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"

exit 3

fi

if [ $v_tmp -eq 0 -a $i -eq $(( $v_len - 2 )) ];then

echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"

exit 3

fi

v_res=${v_res}${v_tmp}

done

#result=$(echo "scale=132; 100^${v_exp} * ${v_res} " | bc -l | tr -d '\n\\\r' | sed -e "s/\.\([0-9]*[1-9]\)0\+$/.\1/" -e "s/\.0\+$//")

else

#negative

v_res="-0."

v_exp=$(printf "%2d" $(( 0xff - "0x"${v_raw:0:2} -0xc0 )))

## substr last 2 char, normal is 0x66 (102)

v_len=$(( $v_len - 2 ))

v_last=$(printf "%02d" $(( "0x"${v_raw:v_len:2} )))

if [ $odebug -eq 1 ] ; then

echo v_ram="$v_raw" v_exp="$v_exp" v_len-2="$v_len" v_last="$v_last"

fi

if [ "$v_last" != "102" -a $v_len -lt 40  ]; then

echo "$v_raw is illegal! offset $v_len = 0x${v_raw:v_len:2}"

exit 4

fi

for ((i=2;i

do

v_tmp=$(printf "%02d" $(( 0x65 - "0x"${v_raw:i:2} )))

if [ $v_tmp -lt 0 -o $v_tmp -gt 99 ]; then

echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"

exit 3

fi

if [ $v_tmp -eq 0 -a $i -eq $(( $v_len - 2 )) ];then

echo "$v_raw is illegal! offset $i = 0x${v_raw:i:2}"

exit 3

fi

v_res=${v_res}${v_tmp}

done

if [ $v_len -eq 42 -a "$v_last" != '102' ]; then

v_tmp=$(printf "%02d" $(( 101 - $v_last )))

if [ $v_tmp -le 0 -o $v_tmp -gt 99 ]; then

echo "$v_raw is illegal! offset $v_len = 0x${v_raw:v_len:2}"

exit 3

fi

v_res=${v_res}${v_last}

fi

#result=$(echo "scale=132; 100^${v_exp} * ${v_res} " | bc -l | tr -d '\n\\\r' | sed -e "s/\.\([0-9]*[1-9]\)0\+$/.\1/" -e "s/\.0\+$//")

fi

if [ $odebug -eq 1 ] ; then

echo v_ram="$v_raw" v_exp="$v_exp" v_len="$v_len" v_res="$v_res"

fi

result=$(echo "scale=132; 100^${v_exp} * ${v_res} " | bc -l | tr -d '\n\\\r' | sed -e "s/\.\([0-9]*[1-9]\)0\+$/.\1/" -e "s/\.0\+$//")

echo "$result"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值