linux - 根据前 n 列降序对行进行排序

标签 linux sorting

我有一个包含混合列的文件,我试图通过将前 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/

相关文章:

python - 如何访问 pybluez 中的蓝牙低级功能?

python - 按第一个元素 float 对包含字符串的元组列表进行排序 (Python)

python - 按元素出现频率对 python 列表进行排序

python - 使用 python 2 根据自定义行顺序对 2D 锯齿状列表进行排序

linux - 在脚本中用 ext4 分区填充磁盘

linux - 程序是否需要退出才能让 Valgrind 工作?

java - 自定义对象的ArrayList的排序是如何工作的?

arrays - 按日期排序时 Swift 数组排序错误

linux - fork 产生的唯一开销是页表复制和进程 ID 创建

linux - Gnome - 确定键盘布局