如何在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