gpt4 book ai didi

linux - 如何从 Bash 中的数组中获取唯一值?

转载 作者:IT老高 更新时间:2023-10-28 12:29:12 31 4
gpt4 key购买 nike

我的问题与 here 几乎相同.

我有一个数组,其中包含 aa ab aa ac aa ad 等。现在我想从这个数组中选择所有唯一的元素。想,这会很简单 sort | uniqsort -u 正如他们在其他问题中提到的那样,但数组中没有任何变化......代码是:

echo `echo "${ids[@]}" | sort | uniq`

我做错了什么?

最佳答案

有点hacky,但应该这样做:

echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '

要将排序后的唯一结果保存回数组中,请执行 Array assignment :

sorted_unique_ids=($(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '))

如果您的 shell 支持 herestrings ( bash 应该),您可以备用 echo通过将其更改为:

tr ' ' '\n' <<< "${ids[@]}" | sort -u | tr '\n' ' '

截至 2021 年 8 月 28 日的说明:

根据ShellCheck wiki 2207一个 read -a应使用管道以避免 split 。因此,在 bash 中,命令将是:

IFS=" " read -r -a ids <<< "$(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')"

IFS=" " read -r -a ids <<< "$(tr ' ' '\n' <<< "${ids[@]}" | sort -u | tr '\n' ' ')"

输入:

ids=(aa ab aa ac aa ad)

输出:

aa ab ac ad

说明:

  • "${ids[@]}" - 使用 shell 数组的语法,是否用作 echo 的一部分或杂音。 @ part 表示“数组中的所有元素”
  • tr ' ' '\n' - 将所有空格转换为换行符。因为你的数组被shell看作是一行中的元素,用空格分隔;并且因为 sort 期望输入在不同的行上。
  • sort -u - 仅排序和保留独特的元素
  • tr '\n' ' ' - 将我们之前添加的换行符转换回空格。
  • $(...) - Command Substitution
  • 旁白:tr ' ' '\n' <<< "${ids[@]}"是一种更有效的方法:echo "${ids[@]}" | tr ' ' '\n'

关于linux - 如何从 Bash 中的数组中获取唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13648410/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com