【问题标题】:How to sort by two fields (one numeric, one string) at the same time using the built in "sort" program?如何使用内置的“排序”程序同时按两个字段(一个数字,一个字符串)排序?
【发布时间】:2011-03-05 18:53:34
【问题描述】:

我有一个文件,比如说“大文件”,表格数据如下,

a1 b2 a3 1
b1 a2 c3 0
...等等。

我想在我的 Linux 机器上使用内置的“排序”程序,因此按第四个字段(数字)对这个文件进行排序,然后同时按第一个字段排序。我浏览了几次手册页,我能想到的是,

sort -n -k4,4 -k1,1 bigfile

有没有办法让“排序”做我想做的事情,或者我必须编写自己的自定义程序?

谢谢。

【问题讨论】:

  • @Orbit,我相信-k4 只是在第 4 列 开始 一个键。但是没有指定键的结尾,因此键一直到结尾。所以,-k4 -k1,实际上更像是-k4 -k5 -k6 -k7 -k1,因此-k1 有点毫无意义。 (是的,这确实违反直觉,但基本上你应该始终为每个字段使用-kX,X
  • @AaronMcDaid - 啊,感谢您的回复。非常感谢!

标签: linux shell unix sorting


【解决方案1】:

来自手册页:

POS 是 F[.C][OPTS],其中 F 是 字段编号和 C 字符 在该领域的地位;两者都是起源 1. 如果 -t 和 -b 都没有生效, 字段中的字符从 前面的开头 空白。 OPTS 是一个或多个 单字母订购选项, 覆盖全局排序选项 为那把钥匙。如果没有给出密钥,请使用 整行作为键。

sort -k4,4n -k1,1 bigfile 应该这样做。

另一个选项是sort -k1,1 bigfile | sort --stable -n -k4,4 稳定排序意味着第 4 个字段的平局由初始位置解析,该初始位置由第一次排序设置为第一个字段。

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2013-01-02
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多