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 ..)
您可以使用两个映射来执行此操作:一个用于跟踪每个字段的最大值$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条件。