在 shell 中固​​定空间/宽度打印变量

在 shell 中固​​定空间/宽度打印变量

我已经对通过 shell 中的 printf 打印的一些数据变量进行了表格报告。

Project One    | 76   | 80M    | 80M    | 80M 
Project Two    | 46M  | 52M    | 52M    | 52M 
Project Three  | 174  | 171M   | -      | 173M 

这里的输出是手动间隔的。有没有办法打印占用固定宽度的变量?

例如,在第一行,76[space]、80M、...总共三个字符宽度,并使用 shell 变量进行打印。

答案1

如果我理解你的意思,你想要的是一个在指定字符串后留下一定数量空格的函数。它如下:

fix_space() {
    string="$1"
    len="$2"
    perl -e "my \$str = '`printf "$string" | sed "s/'/\\'/g"`'; print \$str.' ' x ($len - length(\$str))"
}
echo "'`fix_space "ololfdsaf" 20`'"
echo "'`fix_space "ololff" 20`'"

它只是做了perl所有脏活。字符串作为第一个参数,全长作为第二个参数。我相信这会帮助你对齐你的输出。

编辑:

你也可以不使用 shell 来做到这一点perl。然后你必须输入:

printf "'$string`printf ' '%.0s {1..$((len - ${#string}))}`'\n"

参考

http://rosettacode.org/wiki/Repeat_a_string#UNIX_Shell

相关内容