如何在BASH中将csv文件读入二维数组?该脚本需要足够动态,以便可以将可变数量的行和列带入csv文件。如何在BASH中将csv文件读入二维数组中?
例如,如果我有一个csv文件,看起来像
AVERAGE STDEV MAX
17 18 19
或
AVERAGE STDEV MAX MIN
17 18 19 1
如何在BASH中将csv文件读入二维数组?该脚本需要足够动态,以便可以将可变数量的行和列带入csv文件。如何在BASH中将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中仅支持一维数组。看到2个维度的仿真先进的bash脚本指南中检查出 twodim.sh:
例如在27.17
http://tldp.org/LDP/abs/html/arrays.html
我同意这听起来像是功课。
到目前为止你有什么? – samoz 2010-06-10 18:06:01
这听起来像bash(甚至不直接支持二维数组)。为什么不使用Perl或Python? – 2010-06-10 18:16:06