按任何字段中的最高值排序

Pat*_*ick 2 sorting bash awk

我想根据第2-8列中的值对文件进行排序?基本上我想要根据在任何这些字段中的行上出现的最高值而忽略列1,9和10来升序.即具有最高值的行应该是文件的最后一行,第二大值应该是最后一行等等......如果升序中的下一个数字出现在多行(如A/B)上,我不关心它打印的顺序.

我看过使用排序,但无法想出一个简单的方法来做我想要的...

我有点难过,有什么想法吗?

输入:

#1     2     3     4     5     6     7     8     9    10
 A  0.00  0.00  0.01  0.23  0.19  0.07  0.26  0.52  0.78
 B  0.00  0.00  0.02  0.26  0.19  0.09  0.20  0.56  0.76
 C  0.00  0.00  0.02  0.16  0.20  0.22  2.84  0.60  3.44
 D  0.00  0.00  0.02  0.29  0.22  0.09  0.28  0.62  0.90
 E  0.00  0.00  0.90  0.09  0.18  0.05  0.24  1.21  1.46
 F  0.00  0.00  1.06  0.03  0.04  0.01  0.00  1.13  1.14
 G  0.00  0.00  1.11  0.10  0.31  0.08  0.64  1.60  2.25
 H  0.00  0.00  1.39  0.03  0.04  0.01  0.01  1.47  1.48
 I  0.00  0.00  1.68  0.16  0.55  0.24  5.00  2.63  7.63
 J  0.00  0.00  6.86  0.52  1.87  0.59 12.79  9.83 22.62
 K  0.00  0.00  7.26  0.57  2.00  0.64 11.12 10.47 21.59
Run Code Online (Sandbox Code Playgroud)

预期产量:

#1     2     3     4     5     6     7     8     9    10
 A  0.00  0.00  0.01  0.23  0.19  0.07  (0.26)  0.52  0.78
 B  0.00  0.00  0.02  (0.26)  0.19  0.09  0.20  0.56  0.76
 D  0.00  0.00  0.02  (0.29)  0.22  0.09  0.28  0.62  0.90
 E  0.00  0.00  (0.90)  0.09  0.18  0.05  0.24  1.21  1.46
 F  0.00  0.00  (1.06)  0.03  0.04  0.01  0.00  1.13  1.14
 G  0.00  0.00  (1.11)  0.10  0.31  0.08  0.64  1.60  2.25
 H  0.00  0.00  (1.39)  0.03  0.04  0.01  0.01  1.47  1.48
 C  0.00  0.00  0.02  0.16  0.20  0.22  (2.84)  0.60  3.44
 I  0.00  0.00  1.68  0.16  0.55  0.24  (5.00)  2.63  7.63
 K  0.00  0.00  7.26  0.57  2.00  0.64 (11.12) 10.47 21.59
 J  0.00  0.00  6.86  0.52  1.87  0.59 (12.79)  9.83 22.62
Run Code Online (Sandbox Code Playgroud)

Wil*_*ell 5

预处理数据:在每行的开头打印第2列到第8列的最大值,然后排序,然后删除添加的列:

awk '
    NR==1{print "x ", $0} 
    NR>1{
        max = $2; 
        for( i = 3; i <= 8; i++ ) 
            if( $i > max )
                max = $i;
        print max, $0
    }' OFS=\\t input-file | sort -n | cut -f 2-
Run Code Online (Sandbox Code Playgroud)