首页 > 解决方案 > 如何在bash中对子组内的值进行排序

问题描述

我必须以这样一种方式对 2 个文件的内容进行排序,即我必须首先按日期对其进行排序,然后在每个子组中也按时间对它们进行排序。我尝试通过简单地使用来实现这一点

sort -k 2

接着

| sort -k 3

第二行包含日期,第三行包含时间。问题在于,在第二个排序命令之后,它并没有对每个子组中的值进行实际排序,而是仅按时间重新排列所有值,完全忽略了前面的排序。例如,假设我有以下输入:

名称1 3.5。10:00

名称2 3.5。11:00

名称3 3.5。8:00

名称4 4.5。13:00

名称5 5.5。7:00

我想按它们在每个子组中的时间分别对它们进行排序,而日期保持相同的顺序:

名称3 3.5。8:00

名称1 3.5。10:00

名称2 3.5。11:00

名称4 4.5。13:00

名称5 5.5。7:00

如果解决方案可以写在一行中(例如使用 |),那也将非常有帮助。

先感谢您。

更新:

我尝试使用 sort -k2,2 -k3,3 但无论出于何种原因它仍然不起作用!它正确地对日期进行排序,但时间不正确。如果我在最后添加 -n ,它会正确排序时间,但是日期是无序的......我什至尝试正常排序日期和数字时间: sort -k2,2 -k3,3n 但它仍然仅正确排序日期,而时间仍然无序。我不知道还能做什么。这要死我了……

标签: bash

解决方案


尝试这个:

sort -k2,2 -k3,3 -n file

这意味着对键 2 和键 3 进行排序,这似乎是您想要的,并且-n意味着按数字排序,这显然不适用于日期和时间,但它会更接近您想要的比字母数字排序...


推荐阅读