我有一个以下格式的文件:
somePlane (1,2,3) (1,0,0) (0,0,1) R
awsomePlane (1,0,0) (0,1,0) (0,0,1) B
nicePlane (1,1,1) (2,4,7) (7,1,0) G
我正在尝试按照第一列的字母顺序对其进行排序,并将其放入数组中,而每行都是数组元素。
但是我甚至无法对它进行排序,也不知道如何将每一行放入数组元素中。
我尝试了以下方法进行排序,但它不起作用:
sort -t" " -k1 myfile.txt
如何对其进行排序并将其插入数组?
[编辑] 我有一个错误,似乎我能够对它进行排序,但我仍然不知道如何将每一行插入到数组中。 我使用以下命令进行排序:
sort -t" " -f -k1 myfile.txt
答案 0 :(得分:2)
您可以将线条排序并存储到数组中,如下所示:
# sort and create array
$ IFS=$'\n' arr=( $(sort file.txt) )
# access array elements
$ echo ${arr[0]}
awsomePlane (1,0,0) (0,1,0) (0,0,1) B
$ echo ${arr[1]}
nicePlane (1,1,1) (2,4,7) (7,1,0) G
$ echo ${arr[2]}
somePlane (1,2,3) (1,0,0) (0,0,1) R
答案 1 :(得分:0)
如果您使用的是Bash 4.0或更新版本,最好的方法是使用readarray(mapfile的同义词)重定向和process substitution,因为它不需要循环和风险pathname expansions:
readarray -t ARRAY < <(exec sort -t" " -f -k1 myfile.txt)
示例输出:
> for I in "${!ARRAY[@]}"; do echo "$I : ${ARRAY[I]}"; done
0 : awsomePlane (1,0,0) (0,1,0) (0,0,1) B
1 : nicePlane (1,1,1) (2,4,7) (7,1,0) G
2 : somePlane (1,2,3) (1,0,0) (0,0,1) R