假设我有一个由以下行组成的数组:
arr[0] = 20160330 asdsa 24 asdsa 3 3000 054217542 30.3.2016
arr[1] = 20140102 asdsadsa 25 asdsadsaa 5 4500 534215365 2.1.2014
arr[2] = 20160306 dsasda 23 dsada 4 3200 537358234 6.3.2016
我现在想按第一列对它们进行排序,并按排序顺序打印它们:
20140102 asdsadsa 25 asdsadsaa 5 4500 534215365 2.1.2014
20160306 dsasda 23 dsada 4 3200 537358234 6.3.2016
20160330 asdsa 24 asdsa 3 3000 054217542 30.3.2016
如何在数组上使用排序?
如果您确定没有数组元素包含换行符,请尝试:
$ printf "%sn" "${arr[@]}" | sort -nk1,1
20140102 asdsadsa 25 asdsadsaa 5 4500 534215365 2.1.2014
20160306 dsasda 23 dsada 4 3200 537358234 6.3.2016
20160330 asdsa 24 asdsa 3 3000 054217542 30.3.2016
排序然后删除第一个数字
使用剪切:
$ printf "%sn" "${arr[@]}" | sort -nk1,1 | cut -d" " -f2-
asdsadsa 25 asdsadsaa 5 4500 534215365 2.1.2014
dsasda 23 dsada 4 3200 537358234 6.3.2016
asdsa 24 asdsa 3 3000 054217542 30.3.2016
使用 sed:
$ printf "%sn" "${arr[@]}" | sort -nk1,1 | sed 's/[[:digit:]]*[[:space:]]*//'
asdsadsa 25 asdsadsaa 5 4500 534215365 2.1.2014
dsasda 23 dsada 4 3200 537358234 6.3.2016
asdsa 24 asdsa 3 3000 054217542 30.3.2016
您可以将进程替换与printf
一起使用:
sort -nk1 <(printf "%sn" "${arr[@]}")
20140102 asdsadsa 25 asdsadsaa 5 4500 534215365 2.1.2014
20160306 dsasda 23 dsada 4 3200 537358234 6.3.2016
20160330 asdsa 24 asdsa 3 3000 054217542 30.3.2016