【问题标题】:Sort lines by group and column按组和列对行进行排序
【发布时间】:2016-01-04 05:03:45
【问题描述】:

我有一个用分号分隔的 csv 文件。其中包含如下所示的行。我需要按照第一列和第三列对其进行排序,尊重由第一列的值定义的行组。

booke;book;2
booke;booke;1
booke;bookede;6
booke;bookedes;8
booke;booker;4
booke;bookes;7
booke;booket;3
booking;booking;1
booking;bookingen;2
booking;bookingens;3
booking;bookinger;7
booking;bookingerne;5
booking;bookingernes;6
booking;bookingers;8
booking;bookings;4

预期输出:

booke;booke;1
booke;book;2
booke;booket;3
booke;booker;4
booke;bookede;6
booke;bookes;7
booke;bookedes;8
booking;booking;1
booking;bookingen;2
booking;bookingens;3
booking;bookings;4
booking;bookingerne;5
booking;bookingernes;6
booking;bookinger;7
booking;bookingers;8

我用sort -t; -k3,3n -k1,1 尝试过,但它是按第三整列排序的。

【问题讨论】:

  • 切换-k3,3n-k1,1?

标签: bash sorting unix


【解决方案1】:

以流水线方式使用两种排序怎么样:

sort -t ';' -k 3,3n | sort -t ';' -k 1,1 -s

第二个参数中的-s 是启用稳定排序所必需的。否则可能会破坏之前的(第三列)排序。

编辑:但是作为@BenjaminW。在his comment 中指出,您可以使用多个-k 标志,您只是以错误的方式指定它们。通过执行排序:

sort -t ';' -k 1,1 -k 3,3n

它将第一列作为主要排序列,将第三列作为次要列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多