Bash - 将数组转换为行(使用sort&uniq)

Ita*_*Bar 0 bash

假设我有一个像这样的数组(aabbbccd)我希望数组只有一个字符/字符串(abcd)是否有任何方式将数组转换为行,所以我可以使用sort&uniq而不使用临时文件?

谢谢 !

che*_*ner 5

您可以使用该printf命令.

printf "%s\n" "${array[@]}" | sort | uniq
Run Code Online (Sandbox Code Playgroud)

这将打印每个元素,array后跟换行符到标准输出.

要重新填充数组,您可以使用

readarray -t array < <(printf "%s\n" "${array[@]}" | sort | uniq)
Run Code Online (Sandbox Code Playgroud)

但是,您可以简单地使用关联数组来过滤掉重复项.

declare -A aa
for x in "${array[@]}"; do
    aa[$x]=1
done
array=()
for x in "${!aa[@]}"; do
    array+=("$x")
done
Run Code Online (Sandbox Code Playgroud)

  • 你也可以把'... |结合起来 排序| uniq` into` ... | sort -u` (2认同)
  • 或者`array =("$ {!aa [@]}")`. (2认同)