Chinaunix

标题: printf格式化输出 [打印本页]

作者: xjxh829    时间: 2014-12-10 20:28
标题: printf格式化输出
脚本如下。用printf来控制输出格式。如果当前行和上一行的长度不一致的时候,就会输出扭转,不整齐。如何控制呢?谢谢。

$ cat print.sh
#!/bin/bash
AAA="hello"
BBB="asdasf"
CCC="asdfasfsdf"
printf "%20s%20s%20s\n" "$AAA" "$BBB" "$CCC"
printf "%20s%20s%20s\n" "$BBB" "$AAA" "$CCC"
printf "%20s%20s%20s\n" "$AAA" "$CCC" "$BBB"
$ sh ./print.sh
               hello            asdasf          asdfasfsdf
            asdasf               hello          asdfasfsdf
               hello          asdfasfsdf            asdasf
作者: Buring__    时间: 2014-12-10 20:45
回复 1# xjxh829
要这样输出 左对齐 ??
  1. cat a.sh
  2. #!/bin/bash
  3. AAA="hello"
  4. BBB="asdasf"
  5. CCC="asdfasfsdf"
  6. printf "%-20s%-20s%-20s\n" "$AAA" "$BBB" "$CCC"
  7. printf "%-20s%-20s%-20s\n" "$BBB" "$AAA" "$CCC"
  8. printf "%-20s%-20s%-20s\n" "$AAA" "$CCC" "$BBB"
  9. # bash a.sh
  10. hello               asdasf              asdfasfsdf         
  11. asdasf              hello               asdfasfsdf         
  12. hello               asdfasfsdf          asdasf
复制代码

作者: xjxh829    时间: 2014-12-10 21:19
回复 2# Buring__

我贴错了。如果内容含有中文就不行。

#!/bin/bash
AAA="hello"
BBB="中文的"
CCC="asdfasfsdf"
printf "%-20s%-20s%-20s\n" "$AAA" "$BBB" "$CCC"
printf "%-20s%-20s%-20s\n" "$BBB" "$AAA" "$CCC"
printf "%-20s%-20s%-20s\n" "$AAA" "$CCC" "$BBB"

输出结果为
hello               中文的           asdfasfsdf         
中文的           hello               asdfasfsdf         
hello               asdfasfsdf          中文的      
   
作者: Buring__    时间: 2014-12-10 21:33
因为中英文的长度不一样啊
  1. expr length '中文'
  2. 6
  3. expr length '123'
  4. 3
复制代码

作者: blackold    时间: 2014-12-10 21:39
回复 3# xjxh829


    这和 locale 有关吧。
作者: xjxh829    时间: 2014-12-11 10:08
回复 4# Buring__
那如何控制格式化输出。?

   
作者: Looiml    时间: 2014-12-11 14:29
回复 6# xjxh829
因为每个汉字在FORMAT字串中会消耗掉3个字符宽度,而在视觉上只会占用2个字符宽度。
作者: Buring__    时间: 2014-12-11 16:52
回复 6# xjxh829


    用\t 吧
作者: xjxh829    时间: 2014-12-11 19:17
回复 8# Buring__

用\t 不能喝-20s 共用吧。

   
作者: Buring__    时间: 2014-12-11 22:21
可以啊      




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2