awk:搜索文件中缺少的值

awk:搜索文件中缺少的值,awk,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的解决方案感兴趣。我还欢迎您解释为什么我

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
的解决方案感兴趣。我还欢迎您解释为什么我的代码没有达到预期效果。

试试这个-

awk '{ if (NR != $1) {print NR; exit 1} }' file.txt
4
试试这个-

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

由于您已经有了一个解决方案,与前面的值相比,这里是另一种方法

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

如果缺少多个值,则位置比较将不起作用。

因为您已经有了解决方案,下面是另一种方法,与以前的值进行比较

awk '$1!=p+1{print p+1} {p=$1}' file
如果缺少多个值,则位置比较将不起作用。

这可能会有帮助:

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
也许这会有帮助:

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

变量是
NR
,删除
$
前缀。不保留它,如果它让你感到困惑,就会有其他人…变量是
NR
,删除
$
前缀。不保留它,如果它让你困惑,就会有其他人…@EdMorton-收到。@EdMorton-收到。太好了,只需为正在学习awk的OP添加一些解释,您正在使用一些快捷方式。另外,如果两行之间缺少超过1个数字,则需要一个循环;-)很好,只需为正在学习awk的OP添加一些解释,您正在使用一些快捷方式。另外,如果两行之间缺少超过1个数字,则需要一个循环;-)