免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3912 | 回复: 4
打印 上一主题 下一主题

[数值计算] 求助一个脚本的简化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-03 11:15 |显示全部楼层 |倒序浏览
本帖最后由 zhjwlgh01 于 2016-06-03 11:15 编辑

求大神帮忙简化一个脚本,我写的实在太丑了。。。这个是关于数值转化的,例如有一个数字是  0,0,255, 先将三个数字转成二进制的,不足八位的补成八位,得到00000000,00000000,11111111。 然后第一个数取高五位,第二个取高六位,第三个取高五位,得到00000,000000,11111. 再拼接在一起,得到0000000000011111. 最后分成4份,每份4个数,再转成十六进制的。我写的脚本如下,请大神帮忙修改的简单一点。
#!/bin/sh

Usage()
{
        echo "Error Usage"
        echo "./565_color_key.sh ./1.txt"
        echo ""
}

if [ ! -e $1 ]; then
        Usage
fi
#count the number of rows
CH=` awk '{print NR}' $1 | tail -n1`


for ((i=1; i<$CH ; i=$i+1))
do
        A1=`cat $1 | sed -n "$i"p | awk -F "," '{print $1}'`
        A2=`cat $1 | sed -n "$i"p | awk -F "," '{print $2}'`
        A3=`cat $1 | sed -n "$i"p | awk -F "," '{print $3}'`
        B1=`echo "obase=2;$A1"|bc`
        B2=`echo "obase=2;$A2"|bc`
        B3=`echo "obase=2;$A3"|bc`
        C1=`echo $B1 | awk '{print length($0)}'`
        C2=`echo $B2 | awk '{print length($0)}'`
        C3=`echo $B3 | awk '{print length($0)}'`
        if [ $C1 -eq 1 ]; then
                D1=`echo 0000000$B1 | cut -b 1-5`
        elif [ $C1 -eq 2 ]; then
                D1=`echo 000000$B1 | cut -b 1-5`
        elif [ $C1 -eq 3 ]; then
                D1=`echo 00000$B1 | cut -b 1-5`
        elif [ $C1 -eq 4 ]; then
                D1=`echo 0000$B1 | cut -b 1-5`
        elif [ $C1 -eq 5 ]; then
                D1=`echo 000$B1 | cut -b 1-5`
        elif [ $C1 -eq 6 ]; then
                D1=`echo 00$B1 | cut -b 1-5`
        elif [ $C1 -eq 7 ]; then
                D1=`echo 0$B1 | cut -b 1-5`
        else
                D1=`echo $B1 | cut -b 1-5`
        fi

        if [ $C2 -eq 1 ]; then
                D2=`echo 0000000$B2 | cut -b 1-6`
        elif [ $C2 -eq 2 ]; then
                D2=`echo 000000$B2 | cut -b 1-6`
        elif [ $C2 -eq 3 ]; then
                D2=`echo 00000$B2 | cut -b 1-6`
        elif [ $C2 -eq 4 ]; then
                D2=`echo 0000$B2 | cut -b 1-6`
        elif [ $C2 -eq 5 ]; then
                D2=`echo 000$B2 | cut -b 1-6`
        elif [ $C2 -eq 6 ]; then
                D2=`echo 00$B2 | cut -b 1-6`
        elif [ $C2 -eq 7 ]; then
                D2=`echo 0$B2 | cut -b 1-6`
        else
                D2=`echo $B2 | cut -b 1-6`
        fi

        if [ $C3 -eq 1 ]; then
                D3=`echo 0000000$B3 | cut -b 1-5`
        elif [ $C3 -eq 2 ]; then
                D3=`echo 000000$B3 | cut -b 1-5`
        elif [ $C3 -eq 3 ]; then
                D3=`echo 00000$B3 | cut -b 1-5`
        elif [ $C3 -eq 4 ]; then
                D3=`echo 0000$B3 | cut -b 1-5`
        elif [ $C3 -eq 5 ]; then
                D3=`echo 000$B3 | cut -b 1-5`
        elif [ $C3 -eq 6 ]; then
                D3=`echo 00$B3 | cut -b 1-5`
        elif [ $C3 -eq 7 ]; then
                D3=`echo 0$B3 | cut -b 1-5`
        else
                D3=`echo $B3 | cut -b 1-5`
        fi       

        E=$D1$D2$D3
        F1=`echo $E | cut -b 1-4`
        G1=`echo "obase=16; ibase=2; $F1" | bc`
        F2=`echo $E | cut -b 5-8`
        G2=`echo "obase=16; ibase=2; $F2" | bc`
        F3=`echo $E | cut -b 9-12`
        G3=`echo "obase=16; ibase=2; $F3" | bc`
        F4=`echo $E | cut -b 13-16`
        G4=`echo "obase=16; ibase=2; $F4" | bc`
        H=0x$G1$G2$G3$G4
       
        echo $H >> ./565_color_key.txt
done

论坛徽章:
0
2 [报告]
发表于 2016-06-03 11:29 |显示全部楼层
不好意思,是有一行,不是有一个数字。。。我就是需要把这三个数字最终处理成一个十六进制的数

论坛徽章:
0
3 [报告]
发表于 2016-06-03 12:24 |显示全部楼层
果然这边大神多,非常感谢~~

论坛徽章:
0
4 [报告]
发表于 2016-06-07 13:57 |显示全部楼层
回复 13# jason680

各位大神啊。。。。看完你们的,简直不想活了啊。。。
   

论坛徽章:
0
5 [报告]
发表于 2016-06-07 13:58 |显示全部楼层
回复 11# liion631818


    各位大神啊。。。。看完你们的,简直不想活了啊。。。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP