2016-08-06 5 views
1

여러 열을 숫자 값에 따라 정렬 할 때 항상 sort이 어떻게 작동하는지 궁금합니다. 예를 들어 :여러 열을 숫자로 정렬

1 2 
2 10 
2 3 

을 그렇게 sort -g을 수행

echo -e " 2 3 \n 1 2 \n 2 10" | sort -n 

을 생산하고 있습니다. 나뿐만 아니라 수치 적으로 두 번째 열을 주문하려면, 내가 생각 해낸 유일한 솔루션입니다 :

1 2 
2 3 
2 10 

사람이 행동을 설명 기쁘게인지 알 수 있습니다 : 원하는 출력을 생성

echo -e " 2 3 \n 1 2 \n 2 10" | sort -k1n -k2n 

더 간단한 해결책이 존재합니까?

+0

"-g' 각 행의 ** 접두어를 긴 배정도 부동 소수점 숫자로 변환하여 숫자순으로 정렬합니다." – melpomene

답변

1

sort의 POSIX 사양은 말한다 :

-n
정렬 키를 초기 n으로 제한하십시오. 옵션 <blank> 문자, 선택적 빼기 기호 및 선택적 기수 문자 및 천 단위 구분 기호 (현재 로켈에서 정의 된대로)가있는 0 이상의 자릿수로 구성되며, 산술 값으로 정렬되는 문자열입니다. 빈 자리 문자열은 0으로 처리됩니다. 선행 0과 0 표시는 주문에 영향을주지 않습니다.

이것은 본질적으로 -k1n,1과 같습니다. 여러 개의 열을 숫자순으로 정렬하려면 다음과 같이 말하십시오.

sort -k1n,1 -k2n,2 … 

쉼표 뒤에 '필드 끝'을 생략하는 것에주의하십시오.

+0

기본적으로 모든 열에 -n 옵션을 지정하는 것 외에 다른 방법은 없습니다. 감사 – WolfNZO

-1

간단한 (주요 -k1n이 필요하지 않습니다)하지만,별로로 :

echo -e " 2 3 \n 1 2 \n 2 10" | sort -k2n 

출력은 :

1 2 
2 3 
2 10 
+0

숫자 열 하나만 정렬합니다. 질문은 두 열을 숫자로 정렬하는 방법에 관한 것입니다. 그것은 정말로 그 질문에 대답하지 않습니다. –

+0

@JonathanLeffler, 질문이 문자 그대로 해석된다면, OP의 입력은 질문에 대해 불분명하게 일치하는 것처럼 보입니다. 이러한 모호성을 제거하기 위해 오늘 아침에 다음과 같은 네 가지 옵션에 대해 네 가지 별개의 '정렬'출력을 생성하는 가장 짧고 최상의 2 열 입력이 무엇인지 고려했습니다. 1. -k1n' 2. -k2n' 3. ' -k1n -k2n' 4.'-k2n -k1n'. 절대로 "고려"단계를 지나서 많이 얻지는 못했지만 작동하는 2x3 세트를 찾지 못했습니다 ... – agc

+0

그건 틀렸어 : 우연한 경우에만 첫 번째 열이 올바르게 정렬됩니다. 이 두 번째 예제를 시도하면'echo -e "10 3 \ n 1 2 \ n 2 10"| sort -k2n' 첫 번째 열에서 값 10을 2보다 앞에 두는 것을 알게되었습니다. – WolfNZO

관련 문제