linux排序的奇怪行为

时间:2018-06-13 08:45:48

标签: linux sorting

我认为可能有一些解释,但我只是不明白为什么它表现得像这样:

$ 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对吗?为什么这样混淆了?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您的命令的问题在于它将值视为字符串并相应地按照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

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