【问题标题】:How to sort alphanumeric column in unix with alphabet first and then numeric如何在unix中先用字母然后数字对字母数字列进行排序
【发布时间】:2016-11-08 09:38:39
【问题描述】:

假设我有一个文本文件:

08174 C6517298
08184 P0785411
08184 K0255564
01234 56789012
09098 A9877756

我想先用字母排序第二列,然后再用数字排序

预期的结果应该是:

09098 A9877756
08174 C6517298
08184 K0255564
08184 P0785411
01234 56789012

我试过sort -gk2,2sort -k2,2,都没有给我正确的结果。请帮忙。

【问题讨论】:

    标签: shell sorting unix


    【解决方案1】:

    -gk2,2 替换为-k2g(您的意思是-k 选项,对吗?),然后添加-k2

    sort -k2g -k2 file
    

    键定义语法为F[.C][OPTS][,F[.C][OPTS]],其中F是字段号(特别是2); OPTS 是一个或多个单字母排序选项[bdfgiMhnRrV]

    注意,你不需要,2,因为它意味着在第二列停止排序,第二列是最后一列。

    关键选项优先级按照您在命令中传递的顺序应用,即首先应用-k2g,然后应用-k2

    【讨论】:

      【解决方案2】:
      awk '{print $2,$0}' inputfile |sort -g |awk '{print $2,$3}'
      09098 A9877756
      08174 C6517298
      08184 K0255564
      08184 P0785411
      01234 56789012
      

      【讨论】:

      • 您能否解释一下为什么在这种情况下单独使用 sort -g 不起作用?谢谢。
      • 我不确定,希望大佬能回答这个问题。但是,在这个答案中,我调整了输入以使其易于理解为sort -g。在这里,我将第二列移到行首,然后进行排序,然后从行首移除多余的第二列,使其恢复原状。
      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2011-01-15
      • 1970-01-01
      • 2018-07-29
      相关资源
      最近更新 更多