我有一个包含混合列的文件,我试图通过将前 4 个字段作为键对行进行排序,然后根据第 5 列将它们排序为降序:
file1.txt
AAAA 2 X Q 0.20
AAAA 2 X W 0.45
AAAA 2 X E 0.21
AAAA 2 C Q 0.24
AAAA 2 C W 0.92
AAAA 2 C E 0.0001
AAAA 2 X Q 0.20
AAAA 2 X W 0.55
AAAA 2 X E 0.27
AAAA 2 C Q 0.24
AAAA 2 C W 0.82
AAAA 2 C E 0.04
AAAA 3 X Q 0.40
AAAA 3 X W 0.05
AAAA 3 X E 0.23
AAAA 3 C Q 0.33
最后我想要的是:
AAAA 2 X Q 0.20
AAAA 2 X Q 0.20
AAAA 2 X W 0.55
AAAA 2 X W 0.45
AAAA 2 X E 0.27
AAAA 2 X E 0.21
AAAA 2 C Q 0.24
AAAA 2 C Q 0.24
AAAA 2 C W 0.92
AAAA 2 C W 0.82
AAAA 2 C E 0.04
AAAA 2 C E 0.0001
AAAA 3 X Q 0.40
AAAA 3 X W 0.05
AAAA 3 X E 0.23
AAAA 3 C Q 0.33
对于这个,我正在对文件进行排序并将前 4 个字段保留为键:
sort -rnk1,4 -rnk5 file1.txt
但是,它并没有完全排序,因为我想将相同的前 4 个字段放在一起,在它的输出中,其中一个(标有 ** 以显示它)位于不同的位置:
AAAA 2 X Q 0.20
AAAA 2 X W 0.55
AAAA 2 X W 0.45
AAAA 2 X E 0.27
AAAA 2 X E 0.21
AAAA 2 X Q 0.20 ******
AAAA 2 C Q 0.24
AAAA 2 C Q 0.24
AAAA 2 C W 0.92
AAAA 2 C W 0.82
AAAA 2 C E 0.04
AAAA 2 C E 0.0001
AAAA 3 X Q 0.40
AAAA 3 X W 0.05
AAAA 3 X E 0.23
AAAA 3 C Q 0.33
如何在没有这些未排序文件的情况下正确排序此文件?
最佳答案
您应该首先将文件从第 1 列排序到第 5 列,因为您将第 1-4 列视为键,因此应通过比较键的值(即第 1-4 列)来清除任何平局
sort -rk1,5 -nk1,4 file1.txt
答案是:
AAAA 3 X W 0.05
AAAA 3 X Q 0.40
AAAA 3 X E 0.23
AAAA 3 C Q 0.33
AAAA 2 X W 0.55
AAAA 2 X W 0.45
AAAA 2 X Q 0.20
AAAA 2 X Q 0.20
AAAA 2 X E 0.27
AAAA 2 X E 0.21
AAAA 2 C W 0.92
AAAA 2 C W 0.82
AAAA 2 C Q 0.24
AAAA 2 C Q 0.24
AAAA 2 C E 0.04
AAAA 2 C E 0.0001
关于linux - 根据前 n 列降序对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48361395/