Bash 将文本文件格式化为列

Bash formatting text file into columns

我有一个包含数据的文本文件,它的设置类似于 table,但用逗号分隔,例如:

姓名、年龄、喜欢的颜色、地址

鲍勃,18 岁,蓝色,史密斯街 1 号

朱莉,17 岁,黄色,约翰街 4 号

首先,我尝试使用 for 循环,并将每个 'column' 及其所有值放入一个单独的数组中。

eg/ 'nameArray' 将包含鲍勃、朱莉。

这是我实际脚本中的代码,有 12 列,因此为什么 c 不应大于 12。

declare -A Array

for((c = 1; c <= 12; c++))
{
    for((i = 1; i <= $total_lines; i++))
    {
        record=$(cat $FILE | awk -F "," 'NR=='$i'{print $'$c';exit}'| tr -d ,)
        Array[$c,$i]=$record

    }
}

然后我从这里使用 'printf' 函数来格式化每个数组并将它们打印为列。这个问题是我有 3 个以上的数组,在我的实际代码中它们都在同一 'printf' 行中。我不喜欢,我知道这样做很愚蠢。

for ((i = 1; i <= $total_lines; i++))
{
    printf "%0s %-10s %-10s...etc \n" "${Array[1,$i]}" "${Array[2,$i]}" "${Array[3,$i]}" ...etc
}

然而,这确实给了我想要的输出,见下图:

我想找出不需要大量打印语句的另一种方法。也是我第一次调用 for 循环时出现 'awk'.

错误

如有任何建议,我将不胜感激,我查看了多个主题和帖子,试图找到一个 suitable 解决方案,但没有找到有用的东西。

一样尝试column命令

column -t -s','

这是我可以快速得到的。有关详细信息,请参阅手册页。