按字母顺序,然后按数字顺序对带连字符的名称进行排序 [英] Sort hyphenated names alphabetically, then numerically
本文介绍了按字母顺序,然后按数字顺序对带连字符的名称进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个未排序的服务器列表,如下所示;
bgsqlnp-z101
bgsqlnp-z102
bgsqlnp-z103
bgsqlnp-z2
bgsqlnp-z3
bgsqlnp-z5
dfsqlnp-z108
dfsqlnp-z4
bgsqlnp-z1
dfsqlprd-z8
fuqddev-z88
fuqhdev-z8
ghsbqudev-z18
heiappprod-z1
htsybprd-z24
使用sort
读入文件,我尝试获取以下内容;
bgsqlnp-z1
bgsqlnp-z2
bgsqlnp-z3
bgsqlnp-z5
bgsqlnp-z101
bgsqlnp-z102
bgsqlnp-z103
dfsqlnp-z4
dfsqlnp-z108
dfsqlprd-z8
fuqddev-z88
fuqhdev-z8
ghsbqudev-z18
heiappprod-z1
htsybprd-z24
我只是找不到适用于我的-k
选项的密钥定义。
这是我能得到的最接近的;
sort -k2n -t"z"
bgsqlnp-z1
bgsqlnp-z101
bgsqlnp-z102
bgsqlnp-z103
bgsqlnp-z2
bgsqlnp-z3
bgsqlnp-z5
dfsqlnp-z108
dfsqlnp-z4
dfsqlprd-z8
fuqddev-z88
fuqhdev-z8
ghsbqudev-z18
heiappprod-z1
htsybprd-z24
数字的顺序是正确的,但服务器名称没有排序。
尝试使用多字段键定义(-k1,2n
)似乎没有效果(我根本得不到排序)。
推荐答案
您可以使用sed来避免使用多字符分隔符。在每个排序关键字定义之后,您可以在数字和字典顺序之间切换。请注意,您必须为多个密钥提供多个-k选项,有关这方面的详细信息,请查看手册页。
类似以下内容:
sed 's/-z/ /' file | sort -k2,2n -k1,1d | sed 's/ /-z/'
这篇关于按字母顺序,然后按数字顺序对带连字符的名称进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文