“阵列中的独特元素”有很多类似的线程,但是这些想法似乎不起作用。能否请你看看这个简单的错误:
#!/bin/bash
lim=4
for a in `seq -s' ' 2 $lim`; do
for b in `seq -s' ' 2 $lim`; do
array=$(awk "BEGIN{print $a ** $b}")
uniq=($( echo "${array[@]}" | sort -u ));echo "${uniq[@]}"
done
done
它确实打印了a ^ b的功率,但不知何故找不到唯一的功能。我哪里错了?
示例输出: 4 8 16 9 27 81 16 64 256
答案 0 :(得分:0)
我相信你看到的问题是多方面的。
首先,通过a * b的每次迭代,您只为数组分配一个值,这样在任何时间点您的数组只包含一个元素。
其次,在将值分配给数组之后,您正尝试对唯一元素进行排序。它只有一个元素,因此您可以获得正确唯一的已排序单个元素数组的回显。即使您正在构建阵列,在每次向其添加元素之后,仍然会对其进行不必要的排序。填充阵列后,您只需要对唯一一次排序。
相反,将你的数组填入你的循环(正确)然后在循环之外,排序为唯一:
#!/bin/bash
lim=4
#load the array
for a in `seq -s' ' 2 $lim`; do
for b in `seq -s' ' 2 $lim`; do
# properly add a new element to the array
array=("${array[@]}" "$(awk "BEGIN{print $a ** $b}")")
done
done
# echo original array
echo ${array[@]}
#find unique elements
uniqueArray=$(echo ${array[@]} | tr ' ' '\n' | sort -nu)
#echo unique array
echo ${uniqueArray[@]}