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

时间:2014-08-12 18:46:05

标签: bash

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

谢谢!

3 个答案:

答案 0 :(得分:5)

您可以使用printf命令。

printf "%s\n" "${array[@]}" | sort | uniq

这将打印array的每个元素,后跟新行到标准输出。

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

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

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

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

答案 1 :(得分:0)

好奇心,:

arr=(a a b b b c c d)
echo "${arr[@]}" | xargs -n1 | sort -u

打印

a
b
c
d

echo "${arr[@]}" | xargs -n1 | sort -u | xargs

打印

a b c d

答案 2 :(得分:-2)

 for x in a a b b b c c d; do echo -e $x; done | sort | uniq