【发布时间】:2017-09-30 08:57:33
【问题描述】:
我有一个非常大的制表符分隔文件,其中一部分如下所示:
33 x 171 297 126
4 x 171 300 129
2 x 171 303 132
11 y 163 289 126
5 y 163 290 127
3 y 163 291 128
2 y 163 292 129
2 y 170 289 119
2 z 166 307 141
2 z 166 308 142
6 z 166 309 143
4 z 166 329 163
2 z 166 330 164
我想根据第一列中与其关联的最大值(在 unix 中)对每个行进行排序并选择一行:x、y、z
【问题讨论】:
-
你尝试了什么?
-
所以你会期待
33 x ...、11 y ...和6 z ....? -
试试这个:
perl -lanE '($v,$k)=@F[0..1];$h{$k}=$_,$j{$k}=$v if $j{$k}<$v;END{say for values %h}' file -
请显示您用作插图的输入的预期输出。
-
使用 Linux
sort工具按第 2 列和第 1 列降序排序。这将为您提供一个列表,其中包含所有 x 以及顶部的最高数字、所有 y 以及顶部的最高数字等。然后uniq --skip-fields=1将占据每个组的第一行,为您提供所需的输出。
标签: linux perl sorting unix uniq