LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 881|回复: 3

[已解决]小问题:awk的printf 输出对不齐

[复制链接]
发表于 2006-9-26 11:17:50 | 显示全部楼层 |阅读模式
  1. cat timetable
  2.   学生作息及上课时间

  3.    6:00              起    床
  4.    6:10~6:30        早    操
  5.    6:30~7:10        早 自 习
  6.    7:10              早    餐
  7.    7:40              预 备 铃
  8.    8:00~8:45        第一节课
  9.    8:55~9:40        第二节课
  10.    9:40~10:00       课 间 操
  11.    10:00~10:45      第三节课
  12.    10:55~11:40      第四节课
  13.    11:40~13:40      午餐和午休
  14.    13:40             预 备 铃
  15.    14:00~14:45      第五节课
  16.    14:55~15:40      第六节课
  17.    16:00~16:45      第七节课
  18.    16:55~17:40      第八节课
  19.    17:40~19:00      晚餐和自由活动
  20.    19:00~19:45      第九节课
  21.    19:55~20:40      第十节课
  22.    20:50~21:35      第十一节课
  23.    22:40             教室熄灯
  24.    23:00             就寝熄灯
复制代码

我想加表格线

  1. [sprite@calabash ~]$ more table
  2. #!/bin/bash
  3. sed '1,3d' timetable |awk '
  4. BEGIN {print "+-----------------------------------+";
  5.         print "|    时间       |   活动            |";
  6.         print "+-----------------------------------+"}
  7. {printf "|%14s | ",$1;
  8. tmp="";
  9. for(i=2;i<=NF;i++)
  10.         {tmp=tmp$i;}
  11. printf "%s",tmp;
  12. for(i=0;i<22-length(tmp);i++)
  13. printf "%s"," ";
  14. printf "|\n+---------------+-------------------+\n"}'

复制代码

输出对不齐,为什么呢。


  1. [sprite@calabash ~]$ sh table
  2. +-----------------------------------+
  3. |    时间       |   活动            |
  4. +-----------------------------------+
  5. |   6:10~6:30 | 早操                |
  6. +---------------+-------------------+
  7. |   6:30~7:10 | 早自习             |
  8. +---------------+-------------------+
  9. |          7:10 | 早餐                |
  10. +---------------+-------------------+
  11. |          7:40 | 预备铃             |
  12. +---------------+-------------------+
  13. |   8:00~8:45 | 第一节课          |
  14. +---------------+-------------------+
  15. |   8:55~9:40 | 第二节课          |
  16. +---------------+-------------------+
  17. |  9:40~10:00 | 课间操             |
  18. +---------------+-------------------+
  19. | 10:00~10:45 | 第三节课          |
  20. +---------------+-------------------+
  21. | 10:55~11:40 | 第四节课          |
  22. +---------------+-------------------+
  23. | 11:40~13:40 | 午餐和午休       |
  24. +---------------+-------------------+
  25. |         13:40 | 预备铃             |
  26. +---------------+-------------------+
  27. | 14:00~14:45 | 第五节课          |
  28. +---------------+-------------------+
  29. | 14:55~15:40 | 第六节课          |
  30. +---------------+-------------------+
  31. | 16:00~16:45 | 第七节课          |
  32. +---------------+-------------------+
  33. | 16:55~17:40 | 第八节课          |
  34. +---------------+-------------------+
  35. | 17:40~19:00 | 晚餐和自由活动 |
  36. +---------------+-------------------+
  37. | 19:00~19:45 | 第九节课          |
  38. +---------------+-------------------+
  39. | 19:55~20:40 | 第十节课          |
  40. +---------------+-------------------+
  41. | 20:50~21:35 | 第十一节课       |
  42. +---------------+-------------------+
  43. |         22:40 | 教室熄灯          |
  44. +---------------+-------------------+
  45. |         23:00 | 就寝熄灯          |
  46. +---------------+-------------------+

复制代码

已经解决了。原来awk中一个汉字的lenth=3,为什么不是2呢。


echo 你好 | awk '{print length($1)}'
6
发表于 2006-9-26 15:22:21 | 显示全部楼层
你把这个print "|    时间       |   活动            |";变成printf"%-14%-14\n","|    时间       |","   活动            |";或者是循环的时候把字符的输出格式个改变了。
回复 支持 反对

使用道具 举报

发表于 2006-9-26 23:16:35 | 显示全部楼层
我试了一下你的代码,不是对的很齐吗?把22改成18对的就更齐了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-29 15:35:14 | 显示全部楼层
怎么我在consle下对不齐呢?。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表