Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-打印第一个可用数(不在数组中)可被8整除的数_Bash - Fatal编程技术网

Bash-打印第一个可用数(不在数组中)可被8整除的数

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的倍数的工作结果。这应该可

我在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的倍数的工作结果。

这应该可以:

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]}