我想使用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
我该如何解决?谢谢
答案 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.