【问题标题】:linux shell, sort column 1 in ascending order column 3 in descending orderlinux shell,第1列按升序排序 第3列按降序排序
【发布时间】:2016-08-29 10:07:17
【问题描述】:

我的文件包含 3 列数字,如下面的 5 行数据,

1 811036 395
2 811036 195
1 811036 295
2 811036 95
1 811036 95

我想按升序对第 1 列进行排序,按降序对第 3 列进行排序,

1 811036 395
1 811036 295
1 811036 95
2 811036 195
2 811036 95

我尝试了“sort -n -k 1 -n -k 3”但失败了。 如何编写单个 Linux shell 命令来完成此操作?

【问题讨论】:

    标签: linux shell sorting


    【解决方案1】:

    命令 sort -k1,1n -k3,3nr 应该可以工作。 它仅对第一列进行排序(这是 -k1-k1,1 之间的区别),因此它可以到达第二个参数。

    请注意,sort -k1,1n -k3nr 也可能有效。

    有关多键排序的更多信息:Sorting multiple keys with Unix sorthttps://unix.stackexchange.com/questions/52762/trying-to-sort-on-two-fields-second-then-first

    【讨论】:

      【解决方案2】:

      请试试这个:

       sort -k1n -k3rn
      

      说明:

      -k# 选项:指定用作排序键的列。

      -n:根据字符串数值比较。

      -r : 反转指定键的排序顺序。

      【讨论】:

      • 虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答问题。提供这种额外的背景将显着提高其长期教育价值。请edit您的答案添加解释,包括适用的限制和假设。
      • 感谢您的编辑。不过,我认为这不是必需的,因为 OP 知道这些标志(您可以在问题中看到它们)。重点是他们的安排。
      猜你喜欢
      • 2016-07-19
      • 2011-08-25
      • 1970-01-01
      • 2016-11-07
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多