2013-09-25 4 views
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'을 사용하는 것이 의문의 여지가 없습니다

+1

리눅스와 함께이 작업을 수행하는 방법을 찾을! (RHEL5) 'sed의/-z// '두 | 정렬 -k1,1 -k2g | sed 's// -z /'' 유닉스 (솔라리스)에서 할 수있는 방법이 있으니 .... – Signal15

+0

'sed' stuff wrapping이 작동합니다. 솔라리스는 '-0 +1 +1 -2'와 같이 0 기반의 키 (/ usr/xpg4/bin/sort는 grok -k 옵션을 사용할 수 있습니다)를 사용하지만 정렬 키에'g' 옵션을 인식하지 못합니다 . 'man sort'는 네 친구 야. 행운을 빕니다. – shellter

+0

'-g' 옵션은''sort''를 의미하며,''sort ''를 의미합니다. 번호가 100,1,2,3,30,4 대신 "올바른"순서 (1,2,3,4,30,100)로 표시됩니다. – Signal15

답변

1

여러 문자로 된 구분 기호를 사용하여 sed를 사용할 수 있습니다. 각 정렬 키 정의 다음에 숫자와 사전 순서를 전환 할 수 있습니다. 다중 키에 대해 여러 개의 -k 옵션이 있어야한다는 점에 유의하십시오. 이에 대한 자세한 내용은 매뉴얼 페이지를 확인하십시오. 이 같은

뭔가 :

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

UNIX (Solaris 10)에서는 두 번째 열 (숫자)별로 모든 것을 정렬합니다. :/ – Signal15

+0

@ Signal15 두 번째 열을 기준으로 정렬하고 첫 번째 열을 사용하여 연결을 끊으려고합니다. 맞습니까? – idfah

+0

@ Signal15 필자는 더 이상 테스트 할 Solaris 컴퓨터가 없지만 맨 페이지에 따르면 정상적으로 작동해야합니다. – idfah

관련 문제