【问题标题】:Print the line with maximum value in one column for the same entry ID listed in another column为另一列中列出的相同条目 ID 打印一列中具有最大值的行
【发布时间】:2017-12-27 20:30:15
【问题描述】:

我有一个包含 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  +

预期结果:

123  456   22  NM01  +  
456  783   178 NM02  +

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

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

【问题讨论】:

    标签: bash perl unix awk


    【解决方案1】:

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

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

    这将输出:

    Col1 Col2 Col3 Col4 Col5
    123  456   22  NM01  +
    456  783   178 NM02  +
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2012-05-25
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多