【问题标题】:how to convert from csv to array in bash如何在bash中从csv转换为数组
【发布时间】:2020-07-23 14:42:32
【问题描述】:

我是 bash 新手,我想将 csv 文件转换为不同的数组。我的 csv 有 6 行,每行具有相同的列数,我需要将所有列的第 3、4、5 和 6 行取出,并从每一行中制作和排列,知道我该怎么做吗?

我的 csv 看起来像:

  1. A、B、C、...
  2. 1、1、1、...
  3. 7、23、58、...
  4. 8、24、59、...
  5. 9、25、60、...
  6. 10、26、61、...

我希望我的输出看起来像:

array1=(7,23,58,...)

array2=(8,24,59,...)

array3=(9,25,60,...)

array4=(10,26,61,...)

非常感谢

【问题讨论】:

  • 请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。
  • 你的字段分隔符是什么? ,, 后跟空格?第一列是您文件的 1、2、3、4、5、6 部分吗?
  • 字段分隔符只是 "," ,第一列不是文件的一部分
  • 看起来你正在做一些低效或“危险”的事情。你能解释一下你的目标是什么吗?你听说过awk吗?这可能正是您想要的。
  • 这能回答你的问题吗? How to read in csv file to array in bash script

标签: arrays bash shell csv ubuntu


【解决方案1】:

注意:下面的脚本会产生一个额外的空数组,但它应该可以完成这项工作。

使用 Bash 解析 .csv 文件可能不是最有效的,但有办法做到这一点。请注意,Bash 中的数组由space 分隔,而不是,

在下面的例子中,输入.csv文件是input.csv,输出文件是output.txt

#!/bin/bash
{
    read
    read
    var=0
    while IFS=, read -a arr
    do
        var=$((var+1))
        echo "array${var}=(${arr[@]})" >> output.txt
    done 
} < input.csv

更多解释
* read 的两行是这里的关键:它会读取您输入的.csv 的前两行,然后进入循环,此时它将开始读取第三行。
* 根据文档here-a 标志将读取的单词分配给数组变量 ARRAY 的顺序索引,从零开始
* “@”用于访问由read -a产生的生成数组中的所有值

根据@Poshi 的建议编辑了我的脚本。脚本现在看起来更干净了。

【讨论】:

  • 看看echo-e参数。此外,echo "array${var}=(${arr[*]})" &gt;&gt; output.txt 可以大大简化事情。这是假设字段中没有空格。
  • 很好的建议。一旦确定它有效,我将对其进行测试并更新上面的脚本。
猜你喜欢
  • 2019-09-24
  • 2017-11-26
  • 2017-11-30
  • 2019-12-03
  • 2012-09-06
  • 1970-01-01
  • 2019-08-08
  • 2017-10-02
  • 2017-09-07
相关资源
最近更新 更多