按字母顺序,然后按数字顺序对带连字符的名称进行排序 [英] Sort hyphenated names alphabetically, then numerically

查看:8
本文介绍了按字母顺序,然后按数字顺序对带连字符的名称进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个未排序的服务器列表,如下所示;

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)似乎没有效果(我根本得不到排序)。

以下是有关服务器名称的一些额外信息; 1)他们的名字都有一个"-z[1-200]"后缀,有些数字是重复的。 2)服务器名称的长度不同(4到16个字符) 所以使用‘Cut’是不可能的

推荐答案

您可以使用sed来避免使用多字符分隔符。在每个排序关键字定义之后,您可以在数字和字典顺序之间切换。请注意,您必须为多个密钥提供多个-k选项,有关这方面的详细信息,请查看手册页。

类似以下内容:

sed 's/-z/ /' file | sort -k2,2n -k1,1d | sed 's/ /-z/'

这篇关于按字母顺序,然后按数字顺序对带连字符的名称进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆