이것은 내 파일입니다. 첫 번째 줄은 파일의 일부가 아닙니다( 가 있는 줄 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
GNU 유틸리티는 일반적으로 단일 문자 옵션을 단일 하이픈으로 구성된 그룹으로 구문 분석할 수 있으며,
-n -r
이는 오해할 수 있는 옵션이-nr
없는 경우에만 해당됩니다 .nr
sort를 사용하면
-k 4 -n -r
필드 4를 정렬하고 파일의 각 행을 역순으로 정렬한다는 뜻입니다. 정렬이 완료되고5
두 개의 -key 행이 동일한 키 값을 기준으로 정렬되면 전체 행이 다음과 같이 정렬됩니다.매뉴얼 페이지:마지막으로 모든 키가 동일하다고 판단되는 경우 최후의 수단으로 sort는 --reverse(-r) 이외의 정렬 옵션이 지정되지 않은 것처럼 전체 행을 비교합니다.
...이것이 Mary가 Delta 앞에 나타난 이유입니다.
대신을 사용하는 경우 -k4nr
sort 필드 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로 시작하는 줄이 먼저 나타납니다.