我有一個未排序的服務器列表,如下所示:按字母順序對連字符名稱進行排序,然後按數字排序
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個字符) 因此使用'切'是不可能的
發現瞭如何在Linux做到這一點! (RHEL5) 'sed's/-z//'two | sort -k1,1 -k2g | sed's// -z /'' 希望有一種方法可以用UNIX(Solaris)...... – Signal15
'sed'的東西包裝將起作用。當然,solaris使用的是基於零的密鑰,(/ usr/xpg4/bin/sort可能是grok -k選項),比如'-0 +1 +1 -2',但我不認識排序鍵的'g'選項。 '人排序'是你的朋友。祝你好運。 – shellter
'sort'的'-g'選項是Linux特有的,意思是「字典排序」。數字以「正確」順序(1,2,3,4,30,100)顯示,而不是100,1,2,3,30,4。 – Signal15