Linux排序和剪切除最大值之外的行

时间:2014-11-06 20:12:19

标签: linux awk sed

我有一个问题控件txt文件。

一个文件包含4列,如果我想要删除列中除最大值之外的行

1.Check First Column Name
2.Check Last Column Values.
3.Remove depends on First Column and Last Column.

Test1    500     400    200
Test1    499     400    200
Test1    499     399    200 
Test1    498     100    100
Test2    600     200    150
Test2    600     199    150
Test2    599     199    100

我想删除没有名称顶行的行例如如下所示 姓名分数

Test1    500   400  200
Test1    499   400  200
Test1    499   399  200 
Test2    600   200  150
Test2    600   199  150

任何人都有好主意想出来吗? Awk或Sed ..

感谢您的任何信息!

ubuntu awk sed

1 个答案:

答案 0 :(得分:1)

这是基于glenn jackman的回答,但是根据我对这个问题的解读正确地测试了这些列。数组max包含第1列中每个名称的第4列的最大值。在第二次传递期间,我们测试该列是否与最大值匹配。

awk '
    NR == FNR {
        if ($4 > max[$1]) max[$1] = $4
        next
    }
    $4 == max[$1]
' control.txt control.txt