특정 위치를 기준으로 파일을 정렬하려고 하는데 작동하지 않습니다. 여기에 데이터와 출력이 있습니다.
~/scratch$ cat id_researchers_2018_sample
id - 884209 , researchers - 1
id - 896781 , researchers - 4
id - 901026 , researchers - 15
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 916197 , researchers - 1
~/scratch$ sort -k 28,5 id_researchers_2018_sample
id - 884209 , researchers - 1
id - 896781 , researchers - 4
id - 901026 , researchers - 15
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 916197 , researchers - 1
다음과 같이 마지막 열의 숫자를 기준으로 정렬하고 싶습니다.
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15
답변1
7열을 기준으로 숫자순으로 정렬하려고 합니다.
이 작업은 다음 방법 중 하나로 수행할 수 있습니다.
$ sort -n -k 7 file
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15
또는
$ sort -k 7n file
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15
이는 동일합니다.
이 -n
옵션은 숫자 정렬(사전 정렬과 반대)을 지정합니다. 위의 두 번째 예에서는 n
열 7에 지정자/수정자로 추가합니다.
정렬 키 열의 사양은 열 7부터 시작하여 행을 -k 7
정렬합니다 sort
(열 7부터 행 끝까지). 이 경우 7열이 마지막이므로 이 열만 나타냅니다. 이것이 중요하다면 -k 7,7
("from 7 to columns 7")을 대신 사용할 수도 있습니다 .
두 키가 동일하다고 비교되면 sort
전체 행이 정렬 키로 사용됩니다. 이것이 바로 예제에서 처음 4개 행에 대한 결과를 얻는 이유입니다. 두 번째 열을 두 번 정렬하려면 , sort -n -k 7,7 -k 2,2
또는 sort -k 7,7n -k 2,2n
(각 열의 비교 유형을 별도로 지정)을 사용할 수 있습니다. 또 7번이라면그리고두 번째 열은 sort
전체 행의 사전 편찬 비교를 사용하여 두 행이 동일한지 비교합니다.
문자 위치 29(샘플 데이터의 각 행 끝에 있는 값의 첫 번째 숫자에 해당)를 숫자로 정렬하려면 다음을 수행하세요.
$ sort -k 1.29n file
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7
id - 910480 , researchers - 10
id - 901026 , researchers - 15
-k 1.29n
"주어진 키로 정렬"을 의미합니다 .필드 1의 29번째 문자(앞으로, 줄 끝으로), 숫자".
위의 텍스트에 사용된 -k 7,7n
정확한 값 은 입니다 -k 7.1,7.1n
.
답변2
위치 28로 정렬하려면 NUL 구분 기호를 사용해야 합니다.
sort -t '\0' -k 1.28 file
id - 884209 , researchers - 1
id - 904091 , researchers - 1
id - 905525 , researchers - 1
id - 916197 , researchers - 1
id - 910480 , researchers - 10
id - 901026 , researchers - 15
id - 896781 , researchers - 4
id - 908660 , researchers - 5
id - 908876 , researchers - 7