0

我有一个格式如下的文件:

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 
4

2 回答 2

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
于 2013-09-03T08:05:18.377 回答
0

如果您使用的是 Bash 4.0 或更新版本,最好的方法是使用readarraymapfile的同义词)进行重定向和进程替换,因为它不需要循环并且不会冒路径名扩展的风险:

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
于 2013-09-03T08:59:12.903 回答