【问题标题】:strange behavior with linux sort [duplicate]linux排序的奇怪行为[重复]
【发布时间】:2018-11-22 18:37:36
【问题描述】:

我认为可能有一些解释,但我只是不明白为什么会这样:

$ sort -k 2 -t "|" tests/resources/event1.txt
20180611|10|2|edf|8|abc
20180611|1|2|edf|1|abc
20180611|15|2|edf|15|abc
20180611|2|2|edf|2|abc
20180611|5|2|edf|1|abc
20180611|6|2|edf|1|abc
20180611|7|2|edf|8|abc
20180611|8|2|edf|3|abc

那么为什么 10 在 1 之前,然后 1 在 15 之前?我应该有 10、15、1 或 1、10、15 对吗?怎么这么混?

【问题讨论】:

    标签: linux sorting


    【解决方案1】:

    来自man sort

    -k, --key=POS1[,POS2]
           start a key at POS1 (origin 1), end it at POS2 (default end of line)
    

    您在第二列开始一个键,但它一直持续到行尾。 因此,对于您询问的 3 行,关键是:

    102edf8abc
    12edf1abc
    152edf15abc
    

    在我看来已经排序。

    也许你想要-k 2,2

    【讨论】:

    • 谢谢。下次我会更好地阅读手册页
    • 但是为什么排序还是按照我粘贴的那个顺序出来的?
    • 我想我已经回答了。阅读有关您的排序使用的实际键的部分。
    【解决方案2】:

    您的命令的问题在于,它将值视为字符串并进行相应的排序,这在某种程度上是正确的,因为 1 在 2 之前。只需将 -n 添加到代表 Compare according to string numerical value 的命令中或使用以下命令:

    $ sort -n -k 2 -t "|" tests/resources/event1.txt
    

    输出:

    20180611|1|2|edf|1|abc
    20180611|2|2|edf|2|abc
    20180611|5|2|edf|1|abc
    20180611|6|2|edf|1|abc
    20180611|7|2|edf|8|abc
    20180611|8|2|edf|3|abc
    20180611|10|2|edf|8|abc
    20180611|15|2|edf|15|abc
    

    我希望这能解释您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2012-12-17
      • 2011-03-06
      • 1970-01-01
      相关资源
      最近更新 更多