如何在bash中打印一些文本并用空格填充到一定宽度?

时间:2011-06-14 14:48:45

标签: bash variables printing formatting printf

我在bash脚本中回显了一些带有变量的文本,并希望填充该变量,以便它总是在右边有适当的空格,以保持文本的其余部分对齐。

以下是我想要的一个例子:

Echoing random number 1080    [ OK ]
Echoing random number 443     [ OK ]
Echoing random number 34842   [ OK ]

数值的长度可能不同(可能不超过5或6位)。

我知道printf可以执行此操作并通过执行以下操作右对齐变量:

printf "Echoing random number %5s   [ OK ]" $RAND_NUM

但是,这会格式化文本:

Echoing random number  1080   [ OK ]
Echoing random number   443   [ OK ]
Echoing random number 34842   [ OK ]

当然只是用空格回声起作用不起作用:

echo "Echoing random number ${RAND_NUM}   [ OK ]"

产生这个:

Echoing random number 1080   [ OK ]
Echoing random number 443   [ OK ]
Echoing random number 34842   [ OK ]

有没有办法像我的第一个例子那样打印文本?

3 个答案:

答案 0 :(得分:54)

使用-左对齐字段。

printf "Echoing random number %-5s   [ OK ]" $RAND_NUM

或者,如果您使用的是Red Hat Linux系统,则预定义的功能将打印出绿色OK和红色FAILED提示(您在启动时看到的提示):

#!/bin/bash

. /etc/init.d/functions

echo -n "Frobbing widget:"
frob_widget && echo_success || echo_failure
echo

答案 1 :(得分:4)

将所有行收集到一个var或文本文件中,然后通过column命令将其通过管道传输。 所以这个(我的示例文件/tmp/columns.txt

Echoing random number 1080 [ OK ]
Echoing random number 44332356 [ OK ]
Echoing random number 34842 [ OK ]
Echoing random number 342 [ OK ]

成为了

Echoing  random  number  1080      [  OK  ]
Echoing  random  number  44332356  [  OK  ]
Echoing  random  number  34842     [  OK  ]
Echoing  random  number  342       [  OK  ]

示例命令:cat /tmp/columns.txt | column -t

答案 2 :(得分:0)

要扩展sobi3ch的答案:如果用分隔符连接字符串(我使用tilda(〜)),则可以在该点调用带有-s参数的列来拆分文本。

对猫科动物的道歉

foo.txt :

Echoing random number 1080~[ OK ]
Echoing random number 1080~[ OK ]
Echoing random number 1080~[ Failed ]

然后:

cat foo.txt | column -s'~'

Echoing random number 1080        [ OK ]
Echoing random number 1080        [ OK ]
Echoing random number 1080        [ Failed ]