【问题标题】:sort alphanumerics using unix sort使用 unix sort 对字母数字进行排序
【发布时间】:2023-04-04 17:21:01
【问题描述】:

我有包含以下内容的字母数字文件

z1.doc
z10.doc
z100.doc
z101.doc
z102.doc
z11.doc
z12.doc
z13.doc
z14.doc
z15.doc
z16.doc
z17.doc
z18.doc
z19.doc
z2.doc
z20.doc
z3.doc
z4.doc
z5.doc
z6.doc
z7.doc
z8.doc
z9.doc

我想使用 unix/linux sort 命令对其进行排序以获得以下输出

z1.doc
z2.doc
z3.doc
z4.doc
z5.doc
z6.doc
z7.doc
z8.doc
z9.doc
z10.doc
z11.doc
z12.doc
z13.doc
z14.doc
z15.doc
z16.doc
z17.doc
z18.doc
z19.doc
z20.doc
z100.doc
z101.doc
z102.doc

我使用了以下命令行

sort -t "." -n -k1 sortAlphanumeric.txt

但输出不符合要求。是否可以使用 sort 命令对其进行排序以获得所需的输出,或者我应该选择其他一些脚本语言。

【问题讨论】:

标签: linux perl sorting unix scripting


【解决方案1】:

如果您不想提前确定数据的数字/字母边界在哪里,可以使用模块 Sort::Key::Natural 和 natsort

perl -MSort::Key::Natural -e "print natsort <>" sortAlphanumeric.txt

【讨论】:

【解决方案2】:

您始终可以使用参数-V 执行排序以对字母数字字符串进行排序..

$ sort -V inputfile > outputfile

$ cat inputfile  
z1.doc  
z10.doc  
z100.doc  
z101.doc  
z102.doc  
z11.doc  
z12.doc  
z13.doc  
z14.doc  
z15.doc  
z16.doc  
z17.doc  
z18.doc  
z19.doc  
z2.doc  
z20.doc  
z3.doc  
z4.doc  
z5.doc  
z6.doc  
z7.doc  
z8.doc  
z9.doc    

$ cat outputfile
z1.doc  
z2.doc  
z3.doc  
z4.doc  
z5.doc  
z6.doc  
z7.doc  
z8.doc  
z9.doc  
z10.doc  
z11.doc  
z12.doc  
z13.doc  
z14.doc  
z15.doc  
z16.doc  
z17.doc  
z18.doc  
z19.doc  
z20.doc  
z100.doc  
z101.doc  
z102.doc

【讨论】:

    【解决方案3】:

    告诉 sort 您的键从位置 2 开始,并且您想按数字排序:

    sort -k1.2n
    

    【讨论】:

      【解决方案4】:

      作弊一点。假设字段分隔符是 'z' 并使用第二个字段进行数字排序。

      sort -t z -k 2 -n < fff
      z1.doc
      z2.doc
      z3.doc
      z4.doc
      z5.doc
      z6.doc
      z7.doc
      z8.doc
      z9.doc
      z10.doc
      z11.doc
      z12.doc
      z13.doc
      z14.doc
      z15.doc
      z16.doc
      z17.doc
      z18.doc
      z19.doc
      z20.doc
      z100.doc
      z101.doc
      z102.doc
      

      【讨论】:

        猜你喜欢
        • 2015-01-20
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        相关资源
        最近更新 更多