첫 번째 열을 기준으로 내림차순으로 데이터를 정렬하고, 값이 같으면 두 번째 열을 오름차순으로 사용

첫 번째 열을 기준으로 내림차순으로 데이터를 정렬하고, 값이 같으면 두 번째 열을 오름차순으로 사용

다음 사항을 명확하게 설명해주세요.

몇 가지 키워드와 사용 빈도가 있다고 가정해 보겠습니다.

12 Hi
7  Hash
7  C++  
9  Superuser
17 Stackoverflow
9  LaTeX  
42 Life
9  Ubuntu

내가 원하는 것은 이 데이터를 빈도를 기준으로 내림차순으로 정렬하고 동일한 값이 있으면 두 번째 열을 오름차순으로 사용하는 것입니다.

sort -n -r foo.txt

첫 번째 부분과 두 번째 열도 다음과 같습니다 reversed.

42 Life
17 Stackoverflow
12 Hi
9  Ubuntu
9  Superuser
9  LaTeX  
7  Hash
7  C++

다음 결과를 어떻게 얻을 수 있습니까?

42 Life
17 Stackoverflow
12 Hi
9  LaTeX  
9  Superuser
9  Ubuntu
7  C++ 
7  Hash

인수를 사용해야 할 것 같은데 -k어떻게 해야 할지 모르겠어요!

sort명령만 사용하여 이 작업을 수행하는 방법을 알고 싶습니다 bash. 그러나 이것만으로는 달성할 수 없는 경우 sort다른 명령이 Bourne 쉘과 호환되어야 합니다.

답변1

조건을 사용하여 정렬 키를 개별적으로 지정합니다.

sort -k1,1nr -k2,2 inputfile

이는 첫 번째 키가 숫자에 따라 역순으로 정렬되고 두 번째 키가 다음과 같이 정렬되도록 지정합니다.기본종류.

에서 인용POSIX 정렬:

-케이 키 정의

이것키 정의매개변수는 제한된 정렬 키 필드 정의입니다. 이 정의의 형식은 다음과 같습니다.

필드 스타트[유형][, 필드 끝[유형]]

어디필드 스타트그리고필드 끝행의 일부로 제한되는 키 필드를 정의합니다(확장 설명 섹션 참조). 유형은 문자 목록 'b', 'd', 'f', 'i', 'n', '에서 수정자 강이 됩니다. 'b' 수정자는 -b옵션처럼 동작해야 하지만필드 스타트또는필드 끝붙어 있는 것입니다. 다른 수정자는 해당 옵션처럼 작동해야 하지만 지정된 경우 연결된 키 필드에만 적용되며 이 효과가 있어야 합니다.필드 스타트,필드 끝, 아니면 둘다. 수정자가 추가된 경우필드 스타트또는필드 끝, 어떤 옵션도 적용되지 않습니다. 구현에서는 이 옵션이 최소 9번 발생하도록 지원해야 하며 -k이는 명령줄 순서에서 중요합니다. 옵션을 지정 하지 않으면 -k전체 행에 대한 기본 정렬 키를 사용해야 합니다.

여러 키 필드가 있는 경우 이전 키가 모두 동일하다고 비교된 후에만 이후 키가 비교됩니다. 이 옵션을 지정하지 않으면 같음을 비교하는 행은 , , 또는 -u옵션이 없는 것처럼 정렬되어야 하며 (지정된 경우 여전히 유효함) 행의 모든 ​​바이트를 비교해야 합니다. 행이 동일한지 비교되는 순서는 지정되지 않은 순서로 기록됩니다.-d-f-i-n-k-r

그러면 다음이 생성됩니다.

42 Life
17 Stackoverflow
12 Hi
9  LaTeX
9  Superuser
9  Ubuntu
7  C++
7  Hash

관련 정보