具有匹配 id 的列的最大值

具有匹配 id 的列的最大值

我有一个包含以下字段的文件

NM001 rp1 210
NM003 rp1 220
NM005 rag 200
NM004 rag 100

我希望有一个输出,即对于列 2 中的每个更改,找到列 4 中的最大值,但也报告相应的列 1。到目前为止,我找到了一个解决方案,它报告列 2 和 3,但不报告列 1,因为列 1 中的数字不同。我喜欢使用 awk。

输出应该是

NM003 rp1 220
NM005 rag 200

答案1

使用 awk 可以很容易地做到这一点。

您需要跟踪第二列中每个值的最大值,并且您还希望保留每个具有最大值的整行:

awk '
    $3 > maxvals[$2] {lines[$2]=$0; maxvals[$2]=$3}
    END { for (tag in lines) print lines[tag] }
'

输出未排序,因此sort如果需要特定排序,请通过管道输入。

答案2

尝试使用sortuniq工具:

sort -k3,3nr infile |
awk '{ print $1" " $3" " $2 }' | 
uniq -f2 | awk '{ print $1" " $3" " $2 }' > outfile

相关内容