多个变量的Bash缩进输出

时间:2016-03-20 16:10:20

标签: arrays bash printf output indentation

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

for file in $LIBPATH/*.txt; do
    name=$( awk 'FNR == 1 {print $0}' $file )
    height=$( awk 'FNR == 2 {print $0}' $file )
    weight=$( awk 'FNR == 3 {print $0}' $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

谢谢!

1 个答案:

答案 0 :(得分:0)

使用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个字符。