0

我正在尝试根据文件t1.txt中可用的前两列值对文件的内容进行排序。如果前两列值的组合相同,则应将行保持不变,并且不应考虑对整行进行排序。请在下面找到我的发现。

使用的查询:

猫t1.txt | 排序-nk 1,2

文件 - t1.txt

1993-04-11 07:25:16,668 INFO  b: [Cool: read-189231]: Setting
1993-04-11 07:25:16,668 INFO  ab: [Cool: read-189231]: Completed
1993-04-11 07:25:22,768 INFO  ba: [Cool: read-190983]: Execute
1993-04-11 07:25:22,768 INFO  a: [Cool: read-190983]: Main

1993-01-04 06:24:23,148 INFO  b: [Cool: read-189231]: Setting
1993-01-04 06:24:23,148 INFO  ab: [Cool: read-189231]: Completed
1993-01-04 06:25:22,068 INFO  ba: [Cool: read-190983]: Execute
1993-01-04 06:25:22,068 INFO  a: [Cool: read-190983]: Main

预期输出:

1993-01-04 06:24:23,148 INFO  b: [Cool: read-189231]: Setting
1993-01-04 06:24:23,148 INFO  ab: [Cool: read-189231]: Completed
1993-01-04 06:25:22,068 INFO  ba: [Cool: read-190983]: Execute
1993-01-04 06:25:22,068 INFO  a: [Cool: read-190983]: Main

1993-04-11 07:25:16,668 INFO  b: [Cool: read-189231]: Setting
1993-04-11 07:25:16,668 INFO  ab: [Cool: read-189231]: Completed
1993-04-11 07:25:22,768 INFO  ba: [Cool: read-190983]: Execute
1993-04-11 07:25:22,768 INFO  a: [Cool: read-190983]: Main

实际输出:

1993-01-04 06:24:23,148 INFO  ab: [Cool: read-189231]: Completed
1993-01-04 06:24:23,148 INFO  b: [Cool: read-189231]: Setting
1993-01-04 06:25:22,068 INFO  a: [Cool: read-190983]: Main
1993-01-04 06:25:22,068 INFO  ba: [Cool: read-190983]: Execute

1993-04-11 07:25:16,668 INFO  ab: [Cool: read-189231]: Completed
1993-04-11 07:25:16,668 INFO  b: [Cool: read-189231]: Setting
1993-04-11 07:25:22,768 INFO  a: [Cool: read-190983]: Main
1993-04-11 07:25:22,768 INFO  ba: [Cool: read-190983]: Execute
4

1 回答 1

0

我认为您需要添加-s排序选项,以强制执行稳定排序。来自https://ss64.com/bash/sort.html

最后,作为最后的手段,当所有键比较相等时(或者如果根本没有指定排序选项),'sort' 会比较整行。最后的比较采用“-r”全局选项。“-s”(稳定)选项禁用此最后的比较,以便所有字段比较相等的行保留其原始相对顺序。如果未指定字段或全局选项,则“-s”无效。

于 2020-04-20T12:32:01.590 回答