代码之家  ›  专栏  ›  技术社区  ›  ebk

从一列中以最大值打印整行

  •  1
  • ebk  · 技术社区  · 6 年前

    我现在有个小问题。 我有一个4列的文件

    test0000002,10030010330,c_,218
    test0000002,10030010330,d_,202
    test0000002,10030010330,b_,193
    test0000002,10030010020,c_,178
    test0000002,10030010020,b_,170
    test0000002,10030010330,a_,166
    test0000002,10030010020,a_,151
    test0000002,10030010020,d_,150
    test0000002,10030070050,c_,119
    test0000002,10030070050,b_,99
    test0000002,10030070050,d_,79
    test0000002,10030070050,a_,56
    test0000002,10030010390,c_,55
    test0000002,10030010390,b_,44
    test0000002,10030010380,d_,41
    test0000002,10030010380,a_,37
    test0000002,10030010390,d_,35
    test0000002,10030010380,c_,33
    test0000002,10030010390,a_,31
    test0000002,10030010320,c_,30
    test0000002,10030010320,b_,27
    test0000002,10030010380,b_,26
    test0000002,10030010320,a_,23
    test0000002,10030010320,d_,22
    test0000002,10030010010,a_,6
    

    我想要第四列中的最大值,从第二列排序。

    test0000002,10030010330,c_,218 
    test0000002,10030010020,c_,178 
    test0000002,10030010330,a_,166 
    test0000002,10030010020,a_,151 
    test0000002,10030070050,c_,119 
    test0000002,10030010390,c_,55 
    test0000002,10030010380,d_,41 
    test0000002,10030010320,c_,30 
    test0000002,10030010390,a_,31 
    test0000002,10030010380,c_,33 
    test0000002,10030010390,d_,35 
    test0000002,10030010320,a_,23 
    test0000002,10030010380,b_,26 
    test0000002,10030010010,a_,6
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   glenn jackman    6 年前

    您的文件似乎已经在第4列按降序排序,因此您只需打印第2列第一次出现的行:

    awk -F, '!seen[$2]++' file
    
    test0000002,10030010330,c_,218
    test0000002,10030010020,c_,178
    test0000002,10030070050,c_,119
    test0000002,10030010390,c_,55
    test0000002,10030010380,d_,41
    test0000002,10030010320,c_,30
    test0000002,10030010010,a_,6
    

    如果输入文件未在第4列排序,则

    sort -t, -k4nr file | awk -F, '!seen[$2]++'
    
        2
  •  0
  •   choroba    6 年前

    可以使用两种排序:

    sort -u -t, -k2,2 file | sort -t, -rnk4
    

    第一个将删除第二列中的重复项,第二个将第一个排序到第四列。