为两列排序和统一选项卡分隔文件

时间:2017-05-02 18:14:37

标签: linux perl sorting unix uniq

我有一个非常大的制表符分隔文件,其中一部分如下所示:

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

我想排序并为每个选择一行:x,y,z基于第一列中与其关联的最高值(在unix中)

1 个答案:

答案 0 :(得分:1)

您可以使用awk

执行此操作
awk '
{
  key = $2;
  flag = 0;
  if (key in value) { max = value[key] ; flag = 1 };
  if (flag == 0 || max < $1) { value[key] = $1; line[key] = $0 };
}
END {
  for (key in line) { print line[key] };
}
' data.tsv