For loop 用于在awk中循环以比较文件中的后续行

For loop 用于在awk中循环以比较文件中的后续行,for-loop,awk,For Loop,Awk,我之前问过如何使用awk纠正计数数据中的错误,其中我的数据的第一列是用于识别正在测量的子竞技场的数字,第二列是来自该子竞技场的计数数据。计数是自动进行的,程序会出错(下面用#表示),有时会出现“计数错误”,因为正在计数的动物已经移动到特定子竞技场的范围之外 1 0 1 2 1 6 1 7 1 7 1 8 1 7 # 1 7 # 1 9 2 0 2 0 2

我之前问过如何使用awk纠正计数数据中的错误,其中我的数据的第一列是用于识别正在测量的子竞技场的数字,第二列是来自该子竞技场的计数数据。计数是自动进行的,程序会出错(下面用#表示),有时会出现“计数错误”,因为正在计数的动物已经移动到特定子竞技场的范围之外

1       0
1       2
1       6
1       7
1       7
1       8
1       7 #
1       7 #
1       9
2       0
2       0
2       1
2       4
2       3 #
2       3 #
2       4
2       4
2       6
我想这样更正上面的问题:

1       0
1       2
1       6
1       7
1       7
1       8
1       8
1       8
1       9
2       0
2       0
2       1
2       4
2       4
2       4
2       4
2       4
2       6
好心地建议的代码没有包含用于在每个竞技场的数据中进行更正的for循环(每个文件总共有20个),我一直在尝试解决这个问题,但我遇到了难以置信的困难,有时出现语法错误,有时出现非法语句错误。我希望得到任何关于以下内容不起作用的提示(对不起,我是一个新手,这是我尝试过的众多迭代之一,没有一个是漂亮的):

awk'i=1;i 1&$2outfile

如果行号增加,为什么不让另一个变量跟踪行号来重置
p
,而不是计算行号:

awk '$1 > l { l = $1; p = 0 } $2 < p { $2 = p } { p = $2 } 1' input-file
awk'$1>l{l=$1;p=0}$2

首先,将第一个位置(
$1
)与
l
变量(默认为0)中的值进行比较。如果大于该值,
l
被设置为
$1
,而
p
被重置为0。然后,将第二个位置(
$2
)与
p
进行比较,如果设置的
p
。最后,
p
被设置为(可能更改的)
$2的值。最后的
1
仅表示“打印”;否则,该命令将执行所有处理,但不会打印任何内容。

效果非常好!只需添加“OFS=\\t”即可重置为制表符分隔。特别感谢你的解释!!
awk '$1 > l { l = $1; p = 0 } $2 < p { $2 = p } { p = $2 } 1' input-file