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

时间:2019-11-10 07:30:30

标签: awk

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

这样的样本数据

a 3
a 5
a 4
b 1
c 2
c 3
c 6

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

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

预期输出:

a 3
a 5
b 1
c 2
c 3
c 6

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

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

a 5
c 2
c 6

我该如何解决?谢谢

2 个答案:

答案 0 :(得分:5)

这里是一个:

$ awk '$1!=p1 || $2>p2; {p1=$1;p2=$2}' file
a 3
a 5
b 1
c 2
c 3
c 6

如果$1发生变化或$2比上一轮更大,请打印

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

答案 1 :(得分:1)

请尝试以下操作(当您不希望比较相同的第一个字段值时)。

awk '$2>prev; {prev=$2}' Input_file


如果要查找与第二字段值相同的第一字段比较,请尝试以下操作。

awk 'prev_1st!=$1 || prev!=""; $2>prev && prev_1st==$1; {prev=$2;prev_1st=$1}' Input_file

说明: 添加上述代码的说明。

awk '                        ##Starting awk program here.
prev_1st!=$1 || prev!=""     ##Checking condition if prev_1st variable NOT equal to $1 OR variable prev is NULL then simply print the line.
$2>prev && prev_1st==$1      ##Checking condition if $2 is greater than prev AND prev_1st equals to $1 then print the line.
{
  prev=$2                    ##Creating variable prev and setting its value to $2.
  prev_1st=$1                ##Creating variable prev_1st and setting its value to $1.
}
' Input_file                 ##Mentioning Input_file name here.