繁体   English   中英

如何在BASH中将csv文件读入二维数组中?

[英]How do you read a csv file into a two dimensional array in BASH?

如何在BASH中将csv文件读入二维数组中? 该脚本必须具有足够的动态性,以便它可以接收具有可变行数和列数的csv文件。

例如,如果我有一个csv文件,看起来像

AVERAGE     STDEV     MAX
17          18        19

要么

AVERAGE     STDEV     MAX     MIN
17          18        19      1

模拟二维​​数组的一种方法是将行保留为一维数组中的字符串,并在每次迭代时解压缩它们。 您将必须选择一个合适的分隔符,该分隔符不会出现在数据中。 由于您提到了CSV,因此我将使用逗号,但这不足以使用嵌入式逗号来处理此类数据:

name, start date, visits, games, balance
"Williamson, Dennis", "January 11, 2007", 12, 42, 17000

这是一个简单的示例,它遍历模拟的二维数组中的值:

# avg, stddev, max, min
data_array=(
            "17,18,19,1"
            "12,14,16,2"
            "6,8,10,3"
            )

saveIFS=$IFS

for row in ${data_array[@]}
do
    IFS=","
    cols=($row)
    IFS=$saveIFS
    for col in ${cols[@]}
    do
        newval=$(do_something $col)
    done
done

可以更改数组的内容:

rowidx=2
colidx=2
IFS=","
cols=(${data_array[rowidx]})
cols[colidx]=$some_value
data_array[rowidx]="${cols[*]}"
IFS=$saveIFS

如您所见,它变得非常复杂,并且有很多我没有提到的陷阱。 使用Python。

bash仅支持一维数组。 要查看二维仿真,请查看高级bash脚本指南中的twodim.sh:

例子27.17 in

http://tldp.org/LDP/abs/html/arrays.html

我同意这听起来像是功课。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM