当前位置: 技术问答>linux和unix
关于shell编程中取字节数的问题,在线等请高手指点。
来源: 互联网 发布时间:2017-02-08
本文导语: 本帖最后由 zhang_yugang 于 2012-03-05 09:42:47 编辑 我在做SEHLL编程时,遇到了一个非常棘手的问题,就是字符串(任意字符全角半角都会有,数字也有,符号也有)前面补足 16位,不足16位的补空格。这样我就必须先知道我的字符...
我在做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