日期:2014-05-16  浏览次数:20841 次

关于shell编程中取字节数的问题,在线等请高手指点。
C/C++ code
我在做SEHLL编程时,遇到了一个非常棘手的问题,就是字符串(任意字符全角半角都会有,数字也有,符号也有)前面补足

16位,不足16位的补空格。这样我就必须先知道我的字符串的字节数。LINUX中也没有一个合理的求字节的函数。类似于

windows系统中,全角两个字节,半角一个字节。最终采用了下面的方式。


我用awk处理一个文件,求文件中的某一列的字节长度(不是字符个数,也不是单纯的字节长度,而是全角算2位,半角算1

位)。因为字符编码要转换为SJIS-WIN,这里的处理要传给shell通过wc -c来解决,不能用awk内置的函数length来求字符长

度,否则求的长度不准确。

代码如下:

cmd="echo \""$11 NR"\" | iconv -t SJIS-WIN |wc -c"; cmd| getline lena;a=sprintf("%-"16-lena"s","");

最终在处理时,一列中没有重复的或者重复的在一起没有问题,但是一列中重复与重复的之间有别的字符就会错误。第二个重

复的会参照它紧挨得上面的字符的长度。

测试用例:

我是菜鸟求帮助  ,
我是菜鸟求帮助  ,
帮助           ,
我是菜鸟求帮助            ,

上面数据中最后一列很明显补的长度参照了他紧挨着的上面的长度16-4=12。最终被错误的补了12个空格。


------解决方案--------------------
lz举例说明吧

什么文本?最终要什么输出效果?
------解决方案--------------------
awk '{printf "%-16s,\n", $0}' yourfile