Bash将文本文件格式化为列

利齐

我有一个文本文件,其中包含数据,该文件的设置类似于表格,但用逗号分隔,例如:

名称,年龄,收藏颜色,地址

鲍勃(Bob),18,蓝色,史密斯街1号

朱莉(Johnie),17,黄色,约翰街4号

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

eg /'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

    }
}

然后,从这里我使用'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”错误。

任何建议将不胜感激,我浏览了多个线程和帖子以尝试找到合适的解决方案,但没有找到有用的东西。

辛酸

尝试column像这样命令

column -t -s','

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章