将文本文件格式化为列

Liz*_*eiy 1 arrays bash shell text-files

我有一个包含数据的文本文件,它像桌子一样设置,但用逗号分隔,例如:

姓名,年龄,FavColor,地址

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

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

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

例如/'nameArray'将包含bob,julie.

这是我的实际脚本中的代码,有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

    }
}
Run Code Online (Sandbox Code Playgroud)

从这里我然后使用'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
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

我想弄清楚如何以另一种方式做到这一点,不需要大量的打印声明.我第一次调用for循环时遇到'awk'的错误.

任何建议将不胜感激,我已经查看了多个线程和帖子,试图找到一个合适的解决方案,但没有找到一些有用的东西.

pho*_*xis 6

尝试column像这样的命令

column -t -s','

这就是我能快速得到的.有关详细信息,请参见手册页.