【问题标题】:Shell Programing - How to printf align my output like a table?Shell 编程 - 如何让 printf 像表格一样对齐我的输出?
【发布时间】:2012-07-18 17:46:47
【问题描述】:

如何像表格一样打印输出?

Title                                             Author
BaokyBook                                              Baoky2
Use basename commandUse basename command ..             Baoky

我的部分代码是这样的

titlelength=${#title};

首先我得到标题长度,然后我像这样 printf

titlespace=`expr 60 - titlelength`;
printf "%s %${titlespace}s\n" "$title" "$author"

但是对齐不正确,我该如何让它很好地对齐

回复下面的答案:

修改后

我所有的左边对齐到右边。它似乎不起作用。

【问题讨论】:

  • 要左对齐,请在格式前添加一个破折号 (-):例如下面的答案变成printf "%-30s %s\n" "$title" "$author"。注意%-30s 中的-

标签: linux shell sh


【解决方案1】:

最简单的方法是在固定宽度上打印标题:

printf "%30s %s\n" "$title" "$author"

如果您想确定最大宽度,则需要在进行任何输出之前读取所有数据。或者你可以简单地将你的输出传送到column -t。或者,将标题截断为所选宽度(这种截断字符串的技术是一种bashism):

 printf "%30s %s\n" "${title:0:30}" "$author"

【讨论】:

  • 截断版本在 /bin/sh 上给出“错误替换”。
  • 语法${a:0:30} 是一种bashism,在大多数其他shell 中不起作用。 Bad substitution 表示 shell 不是 bash
  • 字符串可以使用精度说明符printf 截断:printf '%30.29s $s' "$title" "$author"
猜你喜欢
  • 2018-03-23
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 2013-04-04
相关资源
最近更新 更多