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 个字符。
我有一个脚本可以遍历目录中的每个文本文件,并将内容存储在变量中。内容的长度可以是 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 个字符。