提取序列中的缺失数字

时间:2016-06-15 16:40:53

标签: bash shell

我使用grep从文件中提取了一些数字,假设它们是1 2 3 5 6 11 18。要在1..20中获取遗漏,请将其放入文件并使用comm进行比较。

a='1 2 3 5 6 11 18'
printf '%d\n' $a | sort -u > 111
printf '%d\n' {1..20} | sort -u > 222
comm 111 222
rm 111 222

输出

    1
10
    11
12
13
14
15
16
17
    18
19
    2
20
    3
4
    5
    6
7
8
9

没有保存到文件有更方便的方法吗?

1 个答案:

答案 0 :(得分:3)

您可以迭代1到20之间的数字,然后使用正则表达式将每个数字与a进行比较:

a='1 2 3 5 6 11 18'
for i in {1..20}; do
  re="\\b$i\\b"
  [[ "$a" =~ $re ]] || echo "$i"
done

正则表达式非常简单:\bword boundary$i扩展为1,2,...,20

以上内容将打印所有不在a中的数字。