【问题标题】:Bash Indented Output for Multiple Variables多个变量的 Bash 缩进输出
【发布时间】:2023-03-22 09:30:01
【问题描述】:

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

谢谢!

【问题讨论】:

标签: arrays bash printf output indentation


【解决方案1】:

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

【讨论】:

  • 谢谢。如果名称超过 20 个字符,有没有办法在第 20 个字符之后截断名称?我意识到 '%-.20s' 可以实现这一点,但是对于少于 20 个字符的名称,缩进会丢失。
猜你喜欢
  • 2018-02-20
  • 2013-06-11
  • 2010-12-12
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多