我认为可能有一些解释,但我只是不明白为什么它表现得像这样:
$ 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对吗?为什么这样混淆了?
答案 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
我希望这能解释你的问题。