我有一个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。
答案 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 one或this one或this one等教程可能会为您提供更好的服务。