传递数组以在BASH中排序

时间:2016-05-22 00:20:44

标签: bash shell unix

假设我有一个由以下行组成的数组:

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?

2 个答案:

答案 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