找到数组中最小的缺失整数

Mic*_*sey 0 bash perl awk sed

我正在编写一个bash脚本,它需要在数组中搜索最小的可用整数并将其传递给变量.

我知道如何识别数组中的最小或最大整数,但我无法弄清楚如何识别'缺失'最小整数.

示例数组:

1
2
4
5
6
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我需要3作为变量.

Win*_*ute 5

使用sed这将是愚蠢的.使用GNU awk,你可以做到

array=(1 2 4 5 6)
echo "${array[@]}" | awk -v RS='\\s+' '{ a[$1] } END { for(i = 1; i in a; ++i); print i }'
Run Code Online (Sandbox Code Playgroud)

...记住所有数字,然后从1开始计算,直到找到一个不记得的数字并打印出来.然后你可以用bash记住这个数字

array=(1 2 4 5 6)
number=$(echo "${array[@]}" | awk -v RS='\\s+' '{ a[$1] } END { for(i = 1; i in a; ++i); print i }')
Run Code Online (Sandbox Code Playgroud)

但是,如果你已经在使用bash,你可以在纯粹的bash中做同样的事情:

#!/bin/bash

array=(1 2 4 5 6)

declare -a seen
for i in ${array[@]}; do
    seen[$i]=1
done

for((number = 1; seen[number] == 1; ++number)); do true; done

echo $number
Run Code Online (Sandbox Code Playgroud)