传递数组以在 BASH 中进行排序



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

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

相关内容

  • 没有找到相关文章

最新更新