使用unix排序对字母数字进行排序

时间:2014-04-26 13:37:41

标签: linux perl sorting unix scripting

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

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命令对其进行排序以获得所需的输出,或者我应该选择其他一些脚本语言。

4 个答案:

答案 0 :(得分:1)

告诉你,你的密钥从第2位开始,你想要用数字排序:

sort -k1.2n

答案 1 :(得分:1)

您始终可以使用参数-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

答案 2 :(得分:0)

作弊。说场分隔符是' 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

答案 3 :(得分:0)

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

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