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

时间:2017-08-06 18:50:24

标签: linux awk duplicates max

大家好!

我想删除重复项,并在包含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

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

非常感谢你,如果我再问一遍,我很抱歉!但我没有找到问题的答案。

3 个答案:

答案 0 :(得分:2)

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

tail -n +2 file.txt | sort -k1,1 -k4,4rn | sort -uk1,1

说明:

tail -n +2 file.txt

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

sort -k1,1 -k4,4rn

将按列1排序(-k1,1),然后按列4按数字顺序排序(-k4,4rn

最后:

 sort -uk1,1

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

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

答案 1 :(得分:0)

使用GNU datamash 工具:

datamash --headers -Wfs -g1 max 4 < file | cut -f1-4

输出:

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

答案 2 :(得分:0)

awk解决方案,但为了简单起见,我喜欢archimiro版本。

public static void AnimateBackgroundColor(Control control, Color fromColor,Color toColor,int duration)
{

    Rectangle rect = new Rectangle();
    rect.setFill(fromColor);

    FillTransition tr = new FillTransition();
    tr.setShape(rect);
    tr.setDuration(Duration.millis(duration));
    tr.setFromValue(fromColor);
    tr.setToValue(toColor);

    tr.setInterpolator(new Interpolator() {
        @Override
        protected double curve(double t) {
            control.setBackground(new Background(new BackgroundFill(rect.getFill(), CornerRadii.EMPTY, Insets.EMPTY)));
            return t;
        }
    });

    tr.play();
}

结果:

awk '
    NR>1 && $1 in arr {
        if ($4 > arr[$1][4]) 
            split($0, arr[$1])
        next
    } 

    NR>1 { 
        arr[$1][1] = ""
        split($0, arr[$1]) 
    } 

    END { 
        for(i in arr) { 
            for(j in arr[i]) 
                printf arr[i][j] "\t"
            print ""
        }
    }
' data.file