我有一个字符串数组:
arr[0]="1 10 2Z6UVU6h"
arr[1]="1 12 7YzF5mFs"
arr[2]="2 36 qRwAiLg7"
我怎么能按第二列排序并使用1st作为平局。
有什么类似于...的东西吗?
sort -k 2,2n -k 1,1 $arr
答案 0 :(得分:1)
只要任何数组元素中没有换行符,它就是直截了当的:只需将数组printf排序并捕获输出:
mapfile -t sorted < <(printf "%s\n" "${arr[@]}" | sort -k2,2n -k1,1)
(使用进程替换是为了避免mapfile在子shell中运行,这样做没有用,因为目标是在这个shell中设置$sorted
的值。)
如果数组元素可能包含换行符,那么您可以使用NUL作为printf
中的分隔符和sort
(选项-z
进行排序),但是您必须使用显式循环替换mapfile
,因为mapfile
不提供更改行分隔符的选项。 read
确实(-d ''
会导致read
使用NUL作为行分隔符),但它一次只能读取一行。