我和这里的问题差不多。
我有一个包含aa ab aa ac aa ad等的数组。现在,我想从该数组中选择所有唯一元素。思想,这将是简单的用sort | uniq或sort -u因为他们在其他问题中提到,但没有在数组中改变...的代码是:
echo echo "${ids[@]}" | sort | uniq
我究竟做错了什么? 问题来源于stack overflow
有点hacky,但是应该这样做:
echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ' 要将排序后的唯一结果保存回数组,请执行数组分配:
sorted_unique_ids=($(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) 如果您的外壳支持herestrings(bash应该),则可以echo通过将其更改为以下内容来节省进程:
tr ' ' '\n' <<< "${ids[@]}" | sort -u | tr '\n' ' ' 输入:
ids=(aa ab aa ac aa ad) 输出:
aa ab ac ad 说明:
"${ids[@]}"-使用shell数组的语法,无论是作为一部分echo还是在此处使用。该@部分的意思是“数组中的所有元素” tr ' ' '\n'-将所有空格转换为换行符。因为您的数组被shell视为一行上的元素,并用空格分隔;并且因为sort期望输入在单独的行上。 sort -u -仅排序和保留唯一元素 tr '\n' ' ' -将我们先前添加的换行符转换回空格。 $(...)- 命令替换 除了:tr ' ' '\n' <<< "${ids[@]}"是一种更有效的方法:echo "${ids[@]}" | tr ' ' '\n'
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。