Bash-打印第一个可用数(不在数组中)可被8整除的数
我在Bash中有一个数组,可以打印出一系列数字。我想找到第一个可用的(读取:不在数组中)可被8整除的数字(包括0) 将输出:Bash-打印第一个可用数(不在数组中)可被8整除的数,bash,Bash,我在Bash中有一个数组,可以打印出一系列数字。我想找到第一个可用的(读取:不在数组中)可被8整除的数字(包括0) 将输出: 0 1 2 3 8 9 10 11 因此,在本例中,值为“16”。如果该数组中缺少0或8,则这些将被选中 我看到的是: echo "${NUMS[@]}" | awk -v RS='\\s+' '{ a[$1] } END { for(i = 0; i in a; ++i); print i }' 这将给出第一个缺失的整数(4),但尚未得到8的倍数的工作结果。这应该可
0
1
2
3
8
9
10
11
因此,在本例中,值为“16”。如果该数组中缺少0或8,则这些将被选中
我看到的是:
echo "${NUMS[@]}" | awk -v RS='\\s+' '{ a[$1] } END { for(i = 0; i in a; ++i); print i }'
这将给出第一个缺失的整数(4),但尚未得到8的倍数的工作结果。这应该可以:
printf '%s\n' "${NUMS[@]}" |
sort -n |
awk 'BEGIN { num=0 } $0 == num { num+=8 } END { print num }'
想法是开始寻找数字0,如果你找到它,你开始寻找8,依此类推。变量num
在每次发现该数字时都会递增8,以给出尚未看到的下一个8的倍数
仅当阵列尚未排序时才需要排序。这应该可以:
printf '%s\n' "${NUMS[@]}" |
sort -n |
awk 'BEGIN { num=0 } $0 == num { num+=8 } END { print num }'
想法是开始寻找数字0,如果你找到它,你开始寻找8,依此类推。变量num
在每次发现该数字时都会递增8,以给出尚未看到的下一个8的倍数
仅当阵列尚未排序时才需要排序。在阅读Graeme(更好)的解决方案之前,我曾使用过另一种解决方案:
POSSIBLE_VALUES=($(seq 0 8 255))
for i in ${POSSIBLE_VALUES[@]}
do
match=0
for j in ${NUMS[@]}
do
if [ "${i}" == "${j}" ]
then
match=1
break
fi
done
if [ "${match}" == 0 ]
then
c+=($i)
fi
done
echo ${c[0]}
在阅读Graeme(更好)的解决方案之前,我有另一个解决方案:
POSSIBLE_VALUES=($(seq 0 8 255))
for i in ${POSSIBLE_VALUES[@]}
do
match=0
for j in ${NUMS[@]}
do
if [ "${i}" == "${j}" ]
then
match=1
break
fi
done
if [ "${match}" == 0 ]
then
c+=($i)
fi
done
echo ${c[0]}