壳|按升序对日期和月份进行排序

时间:2021-02-07 23:31:51

标签: linux shell sorting

我想按日期和月份的升序显示/排序文件记录,或者如果有任何相等的数据值,它们应该按升序列在下一列中。

要排序的日期和月份:(当前场景)

  • 版本.....03.02../ver>
  • 版本.....19.01../版本>
  • 版本.....02.02..ver>

文件内容

  • ver>0.1.1-ABC-XYA-BR-03.02-v1.0-1-4d4f3dd/ver>
  • ver>0.1.1-XYZ-LOK-BR-19.01-v1.0-5-8a8d7dd/ver>
  • ver>0.1.1-DXD-UIJ-BR-02.02-v1.0-4-9o2k4wk/ver>

我如何才能获得以下结果?

  • ver>0.1.1-XYZ-LOK-BR-19.01-v1.0-5-8a8d7dd/ver>
  • ver>0.1.1-DXD-UIJ-BR-02.02-v1.0-4-9o2k4wk/ver>
  • ver>0.1.1-ABC-XYA-BR-03.02-v1.0-1-4d4f3dd/ver>

我尝试使用排序:(不起作用) sort -n sortfile.txt

  • ver>0.1.1-DXD-UIJ-BR-02.02-v1.0-4-9o2k4wk/ver>
  • ver>0.1.1-ABC-XYA-BR-03.02-v1.0-1-4d4f3dd/ver>
  • ver>0.1.1-XYZ-LOK-BR-19.01-v1.0-5-8a8d7dd/ver>

1 个答案:

答案 0 :(得分:2)

您可以使用 sort,但您需要指定字段分隔符 -t '-',以便字段由 '-' 分隔,然后指定 keydef在第 5 个字段上排序,从第 4 个字符开始,然后再从第一个字符开始,最后在第 6 个字段上进行版本排序,如果其他所有条件都相同。那将是:

sort -t '-' -k5.4n -k5.1n -k6V  contents

在每个 keydef 中提供完整的开始和停止字符可以这样做:

sort -t '-' -k5.4n,5.5 -k5.1n,5.2 -k6V  contents

(虽然对于这个数据,输出没有改变)

示例使用/输出

$ sort -t '-' -k5.4n -k5.1n -k6V  contents
ver>0.1.1-XYZ-LOK-BR-19.01-v1.0-5-8a8d7dd/ver>
ver>0.1.1-DXD-UIJ-BR-02.02-v1.0-4-9o2k4wk/ver>
ver>0.1.1-ABC-XYA-BR-03.02-v1.0-1-4d4f3dd/ver>