Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 如果col2大于最后一行中的col2,则打印_Awk - Fatal编程技术网

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

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 我如何解决它?谢谢请尝试

我想使用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

我如何解决它?谢谢

请尝试以下内容(当您不寻找相同的第一个字段值时,应进行比较)



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

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
的方法并不总是可靠的,因此人们通常采用类似索引的方法。问题:为什么显示第一行?
最后一行
表示输入末尾的行。您指的是前一行。问题:为什么显示第一行?
最后一行
指的是输入末尾的那一行。你的意思是上一行。