我有一个未分类的服务器列表,如下所示;
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
选项找到合适的keydef。
这是我能得到的最接近的;
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
数字顺序正确,但服务器名称未排序。
尝试使用多字段keydef(-k1,2n
)似乎没有效果(我根本没有排序)。
这是关于服务器名称的一些额外信息; 1)所有这些名称后缀都有“-z [1-200]”,有些数字重复。 2)服务器名称长度不同(4到16个字符) 所以使用'cut'是不可能的
答案 0 :(得分:1)
您可以使用sed来绕过多字符分隔符。您可以在每个排序键定义后在数字和字典顺序之间切换。请注意,您必须为多个键提供多个-k选项,请查看手册页以获取有关此内容的详细信息。
这样的事情:
sed 's/-z/ /' file | sort -k2,2n -k1,1d | sed 's/ /-z/'