다음 사항을 명확하게 설명해주세요.
몇 가지 키워드와 사용 빈도가 있다고 가정해 보겠습니다.
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