Bash 多个变量的缩进输出

Bash Indented Output for Multiple Variables

我有一个脚本可以遍历目录中的每个文本文件,并将内容存储在变量中。内容的长度可以是 1-50 个字符。文本文件的数量未知。我想以每个变量都落在一个干净的列中的方式打印内容。

for file in $LIBPATH/*.txt; do
    name=$( awk 'FNR == 1 {print [=11=]}' $file )
    height=$( awk 'FNR == 2 {print [=11=]}' $file )
    weight=$( awk 'FNR == 3 {print [=11=]}' $file )
    echo $name $height $weight
done

此代码产生输出:

Avril Stewart 99 54
Sally Kinghorn 170 60
John Young 195 120

虽然所需的输出是:

Avril Stewart  99  54
Sally Kinghorn 170 60
John Young     195 120

谢谢!

使用printf:

printf '%-20s %3s %3s\n' "$name" "$height" "$weight"

%3s 确保所有字段使用三个字符,%-20s 对 20 个字符执行相同的操作,但前面的 - 使输出左对齐。

如果您想将输出限制为例如20个字符,可以用

printf '%-20.20s %3s %3s\n' "$name" "$height" "$weight"

这将为您提供左对齐的最小宽度 20 个字符和最大宽度 20 个字符,换句话说,它将确保您始终正好有 20 个字符。