删除重复项并保留包含一列最大值的行 - LINUX

M. *_*iro 1 linux awk max duplicates

每个人!

我想删除重复项并在具有 4 个字段的文件中保留一列(第 4 列)中具有最高值的行。我必须在 Linux 服务器上执行此操作。

gene  subj  e-value ident
  g1    h1    0.05   75.5
  g1    h2    0.03   60.6 
  g2    h7    0.00   80.5
  g2    h9    0.00   50.3
  g2    h4    0.03   90.7
  g3    h5    0.10   30.5
  g3    h8    0.00   76.8
  g4    h11   0.00   80.7
Run Code Online (Sandbox Code Playgroud)

gene  subj  e-value ident
  g1    h1    0.05   75.5
  g2    h4    0.03   90.7
  g3    h8    0.00   76.8
  g4    h11   0.00   80.7
Run Code Online (Sandbox Code Playgroud)

非常感谢,如果我重复问了一些问题,我很抱歉!但我没有找到我的问题的答案。

Mau*_*ayo 5

你可以试试这个,如果没有标题的输出没有问题:

tail -n +2 file.txt | sort -k1,1 -k4,4rn | sort -uk1,1
Run Code Online (Sandbox Code Playgroud)

解释:

tail -n +2 file.txt
Run Code Online (Sandbox Code Playgroud)

将删除标题,因此它们不会参与所有排序。

sort -k1,1 -k4,4rn
Run Code Online (Sandbox Code Playgroud)

将首先按第 1 列 ( -k1,1) 然后按数字和相反顺序按第 4 列 ( -k4,4rn)

最后:

 sort -uk1,1
Run Code Online (Sandbox Code Playgroud)

将仅考虑第一列删除重复项。

请注意,这-k1,1意味着从第一列到第一列,因此-k4,4是从第 4 列到第 4 列。调整以适合您的列。