我有一个包含以下字段的文件
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
尝试使用sort
和uniq
工具:
sort -k3,3nr infile |
awk '{ print $1" " $3" " $2 }' |
uniq -f2 | awk '{ print $1" " $3" " $2 }' > outfile