Shell脚本输出格式

时间:2016-05-13 00:02:28

标签: bash unix format

我有一个shell脚本的输出,如下所示

output1        ..... 1
output2     ..... 2
output3                 ............3

我尝试在脚本内部使用相等的间距对其进行格式化,但输出仍然没有均匀的间距。

我想打印输出如下。

output1         ..... 1
output2         ..... 2
output3         ......3

是否有任何通讯可用于完成此操作。我用bash。

这是代码。

lnode=abc
printf "server name                     ......... "$lnode""
printf "\nserver uptime and load details :                                                         ......... `uptime`"
printf "\n"
lcpu=`cat /proc/cpuinfo  | grep -i process |wc -l`
printf "Total number of CPUs on this server :                                       .........  $lcpu\n"

-Thanks。

1 个答案:

答案 0 :(得分:5)

printf的想法是指定一个指定列宽等的格式字符串:

$ cat script.sh
lnode=abc
printf "%-40s %s\n" "server name :"  ".........  $lnode"
printf "%-40s %s\n" "server uptime and load details :"   "......... `uptime`"
lcpu=$(cat /proc/cpuinfo  | grep -i process |wc -l)
printf "%-40s %s\n" "Total number of CPUs on this server :"    ".........  $lcpu"

格式字符串%-40s中的第一个指令应用于格式字符串后面的第一个参数。它告诉printf在40个字符宽的列中显示该参数。如果我们使用了%40s,它将是一个右对齐列。我指定%-40s以便它左对齐。

这会产生如下输出:

$ bash script.sh
server name :                            .........  abc
server uptime and load details :         .........  18:05:50 up 17 days, 20 users,  load average: 0.05, 0.20, 0.33
Total number of CPUs on this server :    .........  4

文档

Bash的printf命令与其他语言中的printf类似,尤其是C版本。特定于bash的详细信息可在man bash中找到。有关可用格式选项的详细信息,请参见man 3 printf。但是,首先,this onethis onethis one等教程可能会为您提供更好的服务。