【问题标题】:Sorting array by numbers and putting into another array in bash按数字排序数组并在bash中放入另一个数组
【发布时间】:2018-02-13 15:39:36
【问题描述】:

我想对一个数字数组进行排序并放入另一个数组。以下代码是我找到的

IFS=$'\n' sorted=($(sort <<<"${array[*]}"))
unset IFS
echo "${sorted[*]}"

但是,这是通过字符串来实现的

1 12 5 111 200 1000 10
1 10 1000 111 12 200 5

如何按数字排序?

【问题讨论】:

  • 只使用sort -n

标签: arrays bash sorting numbers


【解决方案1】:

此代码使用\0 作为分隔符,因此甚至适用于对非数字数组进行排序:

arr=(4 2 3 1 5)
sorted=()

while IFS= read -r -d '' item; do
    sorted+=("$item")
done < <(printf '%s\0' "${arr[@]}" | sort -zn)

bash 4.4 中,您还可以使用readarray

readarray -d '' sorted < <(printf '%s\0' "${arr[@]}" | sort -zn)

【讨论】:

    【解决方案2】:

    不修改IFS

    $ p=(1 10 1000 111 12 200 5)
    $ sorted_p=($(tr ' ' '\n' <<<"${p[@]}" | sort -n))
    $ echo "${sorted_p[@]}"
    1 5 10 12 111 200 1000
    

    【讨论】:

    • 第二个tr 真的没必要:)
    • 没错。我粘贴了当时我正在使用echo 进行的测试。已编辑...
    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多