从 Bash 中的数组元素创建 table

Make a table out of array elements in Bash

我想在BASH脚本中实现以下

当前代码

#!/bin/bash
Var=()
Var=(Title Album Song Rating 1 2 3 4 5 6 7 8 9 10 11 12 13)
echo " ${Var[@]}"

输出:

Title    Album   Song    Rating  1   2   3   4   5   6   7   8   9   10  11  12  13

但我想要实现的是在每第 4 个元素之后并在相等的列中换行。

Title Album Song Rating

1      2     3   4   
5      6     7   8  
10    11     12  13

使用 printf 每行打印四个元素,然后将列与 column 对齐。

$ Var=(Title Album Song Rating 1 2 3 4 5 6 7 8 9 10 11 12)
$ printf '%s %s %s %s\n' "${Var[@]}" | column -t
Title  Album  Song  Rating
1      2      3     4
5      6      7     8
9      10     11    12

如果列数是动态的,您还可以使用一个简单的函数为 printf 生成格式字符串。

genfmt() {
  for ((i = 1; i < ; i++)); do
    printf '%%s '
  done
  printf '%%s\n'
}

printf "$(genfmt 4)" "${Var[@]}" | column -t