假设我有一个由以下行组成的数组:
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
如何在阵列上使用sort?
答案 0 :(得分:2)
如果您确定没有数组元素包含换行符,请尝试:
$ printf "%s\n" "${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 "%s\n" "${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 "%s\n" "${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
答案 1 :(得分:1)
您可以使用printf
:
sort -nk1 <(printf "%s\n" "${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