如何在unix终端中的唯一顺序列表(每行一个)中找到缺失的整数?

Jak*_*ght 3 unix bash awk

假设我有一个如下文件(一个有序的,唯一的整数列表,每行一个):

1
3
4
5
8
9
10
Run Code Online (Sandbox Code Playgroud)

我想要以下输出(即列表中缺少的整数):

2
6
7
Run Code Online (Sandbox Code Playgroud)

我怎样才能在bash终端中实现这一点(使用awk或类似的解决方案,最好是单行程)?

anu*_*ava 8

使用awk你可以这样做:

awk '{for(i=p+1; i<$1; i++) print i} {p=$1}' file

2
6
7
Run Code Online (Sandbox Code Playgroud)

  • 变量 p 包含来自前一条记录的值,我们从 p+1 循环到当前行的值。 (2认同)

cho*_*oba 5

使用seqgrep

seq $(head -n1 file) $(tail -n1 file) | grep -vwFf file -
Run Code Online (Sandbox Code Playgroud)

seq创建完整的序列,grep从中删除文件中存在的行。