对于另一列中列出的相同条目 ID,打印一列中具有最大值的行

use*_*432 2 unix bash perl awk

我有一个包含 5 列的制表符分隔文件。我想在第 4 列中列出的条目的第 3 列中的值达到最大值时打印整行。输入示例:

Col1 Col2 Col3 Col4 Col5
123  456   22  NM01  +  
675  564   21  NM01  +  
342  789   12  NM01  +  
231  452   56  NM02  +  
456  783   178 NM02  +
Run Code Online (Sandbox Code Playgroud)

预期结果:

123  456   22  NM01  +  
456  783   178 NM02  +
Run Code Online (Sandbox Code Playgroud)

基本上,当 Col3 具有 col4 中条目的最大值时打印该行。

我正在尝试使用unix命令。我对此很陌生,无法找到如何查找 col3 中 col4 每种情况的最大值的示例(例如:NM01、NM02 ..)

Sto*_*ica 5

您可以使用两个映射来执行此操作:一个用于跟踪每个字段的最大值$4,另一个用于跟踪每个字段具有最大值的完整行$4

awk '$3 > max[$4] { max[$4] = $3; m[$4] = $0 }
     END { for (i in m) { print m[i] } }' file.txt
Run Code Online (Sandbox Code Playgroud)

这将输出:

Col1 Col2 Col3 Col4 Col5
123  456   22  NM01  +
456  783   178 NM02  +
Run Code Online (Sandbox Code Playgroud)

如果您不需要标题行,可以添加NR > 1条件。