Awk 如果col2大于最后一行中的col2,则打印
我想使用awk提取列值大于最后一行的行 这样的样本数据Awk 如果col2大于最后一行中的col2,则打印,awk,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 我如何解决它?谢谢请尝试
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
我如何解决它?谢谢请尝试以下内容(当您不寻找相同的第一个字段值时,应进行比较)
如果您想查找相同的第一个字段与第二个字段值的比较,请尝试以下操作
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.
请尝试以下内容(当您不寻找相同的第一个字段值时,应进行比较)
如果您想查找相同的第一个字段与第二个字段值的比较,请尝试以下操作
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.
这里有一个:
$ awk '$1!=p1 || $2>p2; {p1=$1;p2=$2}' file
a 3
a 5
b 1
c 2
c 3
c 6
如果$1
发生变化或$2
比上一轮大,请打印
有关更多字段的通用解决方案,请参见下文。这里有一个:
$ awk '$1!=p1 || $2>p2; {p1=$1;p2=$2}' file
a 3
a 5
b 1
c 2
c 3
c 6
如果$1
发生变化或$2
比上一轮大,请打印
有关更多字段的通用解决方案,请参见下文。谢谢。所以问题是这里的“getline”读取了下一行?你可能会让它与
getline
一起工作,但很明显,当我回首往事而不是向前看时,我变老了D嗯,实际上,使用getline
你每次迭代都要读2行,所以这可能不容易处理。当只处理2个字段时没什么大不了的,但是要处理需要从前一行访问多个字段的一般情况:awk'$1=p[1]| |$2>p[2];{split($0,p)}文件
。谢谢。所以问题是这里的“getline”读取了下一行?你可能会让它与getline
一起工作,但很明显,当我回首往事而不是向前看时,我变老了D嗯,实际上,使用getline
你每次迭代都要读2行,所以这可能不容易处理。当只处理2个字段时没什么大不了的,但是要处理需要从前一行访问多个字段的一般情况:awk'$1=p[1]| |$2>p[2];{split($0,p)}文件
。谢谢。我不太懂这里的“!prev;”。我怎样才能在括号中添加带“;”的if条件呢?@Bin,我已经在这里为我的代码添加了详细的解释。此外,使用getline
的方法并不总是可靠的,因此人们通常采用类似索引的方法。谢谢。我不太懂这里的“!prev;”。我怎样才能在括号中添加带“;”的if条件呢?@Bin,我已经在这里为我的代码添加了详细的解释。此外,使用getline
的方法并不总是可靠的,因此人们通常采用类似索引的方法。问题:为什么显示第一行?最后一行
表示输入末尾的行。您指的是前一行。问题:为什么显示第一行?最后一行
指的是输入末尾的那一行。你的意思是上一行。