如果col2大于最后一行的col2,则打印

Bin*_*Bin 1 awk

我想使用awk提取具有比最后一行更大的列值的行。

这样的样本数据

a 3
a 5
a 4
b 1
c 2
c 3
c 6
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令,但没有用

awk '{if(($1!=a) || ($1==a && $2>b)){getline; print}};{a=$1;b=$2}'
Run Code Online (Sandbox Code Playgroud)

预期的输出:

a 3
a 5
b 1
c 2
c 3
c 6
Run Code Online (Sandbox Code Playgroud)

仅应删除“ a 4”行,因为4小于最后一行(5)的第二列。

但是我的代码的实际结果是:

a 5
c 2
c 6
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢

Jam*_*own 5

这是一个:

$ awk '$1!=p1 || $2>p2; {p1=$1;p2=$2}' file
a 3
a 5
b 1
c 2
c 3
c 6
Run Code Online (Sandbox Code Playgroud)

如果与上一轮相比有$1变化或$2更大,请打印

有关更多字段的通用解决方案,请参见下面的注释

  • 仅处理2个字段不是什么大问题,但是可以处理需要从前一行访问多个字段的一般情况:`awk'$ 1!= p [1] || $ 2> p [2]; {split($ 0,p)}'文件`。 (2认同)