【发布时间】:2014-10-05 23:12:51
【问题描述】:
假设我有一个这样的数组 (a a b b b c c d) 我希望数组每个字符/字符串只有一个(a b c d) 有什么方法可以将数组转换为行,这样我就可以在没有临时文件的情况下使用 sort & uniq?
谢谢!
【问题讨论】:
-
无法理解
array into lines是什么意思?
标签: bash
假设我有一个这样的数组 (a a b b b c c d) 我希望数组每个字符/字符串只有一个(a b c d) 有什么方法可以将数组转换为行,这样我就可以在没有临时文件的情况下使用 sort & uniq?
谢谢!
【问题讨论】:
array into lines 是什么意思?
标签: bash
您可以使用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
【讨论】:
... | sort | uniq合并成... | sort -u
array=("${!aa[@]}")。
for循环?
出于好奇,以下:
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
【讨论】:
for x in a a b b b c c d; do echo -e $x; done | sort | uniq
【讨论】: