1

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

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' 是不可能的

4

1 回答 1

1

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

像这样的东西:

sed 's/-z/ /' file | sort -k2,2n -k1,1d | sed 's/ /-z/'
于 2013-09-25T17:30:49.327 回答