创建一个数组数组,其中每一行都是我的数据集iris-shuffled.txt
中的一行,结构如下:
7.2,3.0,5.8,1.6,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
4.8,3.0,1.4,0.1,Iris-setosa
6.8,3.0,5.5,2.1,Iris-virginica
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
7.3,2.9,6.3,1.8,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
5.8,4.0,1.2,0.2,Iris-setosa
我希望将以下伪代码转换为bash(以了解如何通过bash变得更好),这是我的希望:
file = data/iris-shuffled.txt
line_count = NumberOfLines(line);
container_of_rows = emptyArray();
for row in file:
column_container=emptyArray();
for col in file:
column_container+=col
container_of_rows+=column_container
这不适用于存储第二个数组
#!/bin/bash
# Grab the data
file=data/iris-shuffled.txt
# Count the lines
num_lines=$(cat data/iris-shuffled.txt | wc -l)
echo $num_lines
# Store lines into an array
lines=($(cat data/iris-shuffled.txt))
echo ${lines[0]} #row1
echo ${lines[1]} #row2
mega_list=()
for line in "${lines[@]}"
do
IFS="," read -ra A_ROW <<< "$line"
echo ${A_ROW[@]}
list=()
for i in "${A_ROW[@]}"
do
echo $i."~"
list+=($i)
done
mega_list+=(${list}) #not appending right
done
Iris-setosa.~
5.4 3.7 1.5 0.2 Iris-setosa
5.4.~
3.7.~
1.5.~
0.2.~
Iris-setosa.~
5.1 3.3 1.7 0.5 Iris-setosa
5.1.~
3.3.~
1.7.~
0.5.~
Iris-setosa.~
7.3 2.9 6.3 1.8 Iris-virginica
7.3.~
2.9.~
6.3.~
1.8.~
Iris-virginica.~
6.7 3.1 5.6 2.4 Iris-virginica
6.7.~
3.1.~
5.6.~
2.4.~
Iris-virginica.~
5.8 4.0 1.2 0.2 Iris-setosa
5.8.~
4.0.~
1.2.~
0.2.~
Iris-setosa.~
当我运行echo ${mega_list[0]}
时,我的输出只是7.2(row1 col1),但我希望将整行作为单独的数组成员[0]7.2 [1]3.0 [2]5.8 [3]1.6 [4]Iris-virginica
答案 0 :(得分:0)
如果您使用适当的工具完成任务,这不是一个难题。例如,
awk -F, '{for(i=1;i<=NF;i++) a[NR,i]=$i} END{print a[4,5]}' file
Iris-virginica
取决于您想要对数据执行的操作,您甚至可能不需要将其存储在数组中。
其他示例,稍作修改即可为每个唯一键创建字段总和
$ awk -F, '{for(i=1;i<NF;i++) a[$NF,i]+=$i;
u[$NF]}
END {for(k in u)
{for(i=1;i<NF;i++) printf "%2.1f,", a[k,i];
printf "%s\n", k}}' file
26.1,17.6,7.2,1.2,Iris-setosa
34.3,14.9,28.8,9.7,Iris-virginica