【问题标题】:Sorting the line according to first n columns in descending order根据前 n 列以降序对行进行排序
【发布时间】:2018-01-20 21:41:51
【问题描述】:

我有一个包含混合列的文件,我正在尝试对行进行排序,将前 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

如果没有这些未排序的文件,我怎样才能正确排序这个文件?

【问题讨论】:

  • 问题是您的字段 4 与其他 5 没有排序关系。相对于其他两个,它既没有按升序或降序排序。您可以通过 sort -k1,2 -k3r -k5r file1.txt 接近,但字段 4 没有任何帮助。
  • @bapors,这个答案能解决你的问题吗?
  • 是的,现在接受答案!

标签: linux sorting


【解决方案1】:

您应该首先将文件从第 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

【讨论】:

  • 这是一个很好的尝试,但不匹配“我最后想要的是:”
  • 它进一步增强了我猜你想要的东西。您唯一的要求是使用前四个字段作为键并在同一键中以相反的顺序对第 5 列进行排序,您没有提及前四个字段的顺序。此外,您想要的答案甚至没有前四个字段的任何顺序。唯一的问题是相同的键彼此相邻。我提供的解决方案的前 4 列也按排序顺序排列,效果更好。
猜你喜欢
  • 2021-09-06
  • 2021-08-04
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多