awk:在文件中搜索缺失值

时间:2017-03-28 17:59:27

标签: awk

awk新手在这里!我正在寻求帮助来解决一个简单的具体任务。

以下是file.txt

1
2
3
5
6
7
8
9

如您所见,缺少一个数字(数字4)。我想在控制台上打印缺少的4号。我的想法是将当前行号与条目进行比较,只要它们不匹配,我就会打印行号并退出。我试过了

cat file.txt | awk '{ if ($NR != $1) {print $NR; exit 1} }'

但它只打印换行符。

我正试图通过这个小小的练习来学习awk。因此,我主要对使用awk的解决方案感兴趣。我也欢迎解释为什么我的代码没有达到我的预期。

3 个答案:

答案 0 :(得分:2)

试试这个 -

list

答案 1 :(得分:2)

因为你已经有了解决方案,所以这是另一种方法,与之前的值进行比较。

awk '$1!=p+1{print p+1} {p=$1}' file

如果您有多个缺失值,您的位置比较将无法正常工作。

答案 2 :(得分:0)

也许这会有所帮助:

seq $(tail -1 file)|diff - file|grep -Po '.*(?=d)'
4

因为我正在学习awk

awk 'BEGIN{i=0}{i++;if(i!=$1){print i;i=$1}}' file
4

`awk` explanation read each number from `$1` into array `i` and increment that number list line by line with `i++`, if the number is not sequential, then print it.

cat file
1
2
3
5
6
7
8
9
11
12
13
15

 awk 'BEGIN{i=0}{i++;if(i!=$1){print i;i=$1}}' file
 4
 10
 14