sort -k4nr과 sort -k 4 -n -r이 다른 결과를 제공하는 이유는 무엇입니까? [복사]

sort -k4nr과 sort -k 4 -n -r이 다른 결과를 제공하는 이유는 무엇입니까? [복사]

이것은 내 파일입니다. 첫 번째 줄은 파일의 일부가 아닙니다( 가 있는 줄 Fname ..).

Fname Lname Age Children 
John  Doe   61  2
Mary  Jane  32  5
Delta Cross 30  5
Sui   Ace   24  1

이 파일을 기준으로 정렬하고 싶습니다.자녀의 수. 대부분의 어린이부터 가장 적은 어린이까지 정렬되어야 합니다.

내 명령은 다음과 같습니다. sort -k 4 -n -r file.txt이는 네 번째 열을 기준으로 정렬하고, 숫자로 정렬하고, 역순으로 정렬하는 것을 의미합니다. 이는 다음을 생성합니다.

Mary  Jane  32  5
Delta Cross 30  5
John  Doe   61  2
Sui   Ace   24  1

그것이 바로 내 글이 하는 일이다 sort -k4nr file.txt. 이에 대해 두 가지 질문이 있습니다.

첫째, 옵션을 (함께 연결하는 것이 아니라) 공백으로 구분해야 한다고 생각했습니다. 정렬이나 어떤 명령에도 해당되지 않나요?

둘째, 이 작업을 수행하면 "올바른" 순서를 얻게 됩니다. 하지만 Delta먼저 다음과 같은 결과를 얻을 수 있습니다.

Delta Cross 30  5
Mary  Jane  32  5
John  Doe   61  2
Sui   Ace   24  1

왜 이런거야?

답변1

  1. GNU 유틸리티는 일반적으로 단일 문자 옵션을 단일 하이픈으로 구성된 그룹으로 구문 분석할 수 있으며, -n -r이는 오해할 수 있는 옵션이 -nr없는 경우에만 해당됩니다 .nr

  2. sort를 사용하면 -k 4 -n -r필드 4를 정렬하고 파일의 각 행을 역순으로 정렬한다는 뜻입니다. 정렬이 완료되고 5두 개의 -key 행이 동일한 키 값을 기준으로 정렬되면 전체 행이 다음과 같이 정렬됩니다.매뉴얼 페이지:

    마지막으로 모든 키가 동일하다고 판단되는 경우 최후의 수단으로 sort는 --reverse(-r) 이외의 정렬 옵션이 지정되지 않은 것처럼 전체 행을 비교합니다.

...이것이 Mary가 Delta 앞에 나타난 이유입니다.

대신을 사용하는 경우 -k4nrsort 필드 4를 사용하고 해당 필드를 역순으로 정렬하도록 지시합니다. 정렬이 5와 5의 비교를 마치면 일반 사전식 순서로 두 개의 (전체) 행을 정렬하므로(여기에는 전역 절 옵션이 없기 때문에 r) Delta가 Mary 앞에 옵니다.

답변2

명령에 따라 옵션을 그룹화할 수 있습니다. sort그 중 하나이지만 아래에서 다룰 출력을 변경할 수도 있습니다.

이는 다음에도 적용됩니다.rm

rm -rf directory같은 일을rm -r -f directory

두 명령이 서로 다른 순서를 지정하는 이유에 대해 첫 번째 명령은 네 번째 열을 key 로 사용하여 -k 4정렬한 다음 숫자순으로 정렬한 다음 이를 반대로 진행합니다. (실제로는 n네 번째 열에 숫자만 포함되어 있으므로 그럴 필요가 없습니다 . 따라서 sort -k 4 -r동일한 출력이 제공됩니다.) 그런 다음 나머지 열을 역순으로 정렬합니다.

두 번째 명령은 이를 결합한 다음 네 번째 열만 역순으로 정렬하여 작동합니다. 네 번째 열은 동일한 키 값을 가지므로 처음 두 열을 알파벳순으로 계속 정렬합니다.

이 줄을 변경하는 경우:

Delta Cross 30 5

도착하다

Zelta Cross 30 5

그러면 두 번째 명령에서 Mary로 시작하는 줄이 먼저 나타납니다.

관련 정보