【问题标题】:How to sort primary column with alphabet order then secondary column with numeric order?如何按字母顺序对主要列进行排序,然后按数字顺序对次要列进行排序?
【发布时间】:2012-08-07 01:24:54
【问题描述】:

假设有一个文本文件:

10  A   QAZ
5   A   EDC
14  B   RFV
3   A   WSX
7   B   TGB

我想将第二列作为主列,按字母顺序排序,第一列作为第二列,按数字顺序排序。以下是预期的结果:

3   A   WSX
5   A   EDC
10  A   QAZ
7   B   TGB
14  B   RFV

我尝试了sort -k 2,2 -k 1,1 a.txt -nsort -k 2,2 -k 1,1 a.txt,但都给出了错误的结果。我应该怎么解决这个问题?谢谢。

【问题讨论】:

    标签: bash shell sorting


    【解决方案1】:

    这应该可行:

    sort -b -k2,2 -k1,1n
    

    -b 是必不可少的,没有它,输出是错误的,因为sort 错误地确定了第二列的位置。详情请见man sort(或here)。

    另外,请检查您的locale。他们可以影响sort 的工作方式。

    【讨论】:

    • 第二个字段说明符是不必要的。 sort -b -k2 -k1n 应该可以工作
    • -b 是我自己的(已删除)答案中缺少的。 sort 似乎将两个字段之间存在的最小空格量视为分隔符,并将给定行中的任何额外空格分配给第二个字段。
    • @WilliamPursell:不是这样。检查echo $'3 A WSX\n14 B RFV\n2 A ZZZ'
    • 看起来 -k2,2 -k1n 有效。 (如果您仅使用-k 指定第一个字段,也许有人可以澄清默认值。)
    • @chepner:链接的手册页说:这是行的结尾。一旦您开始在第 2 列中获取数字,您可能也需要 k1,1。
    【解决方案2】:

    这可能对你有用:

    sort -k1.5,1.8 -k1.1,1.4n file
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2013-05-02
      • 2014-02-08
      相关资源
      最近更新 更多