하나의 열로만 UNIX를 정렬하는 방법은 무엇입니까? 경우 : 2 3 2 2 1 2 2

유닉스 정렬에 대한 -k 옵션을 사용하면 특정 열과 다음 열을 기준으로 정렬 할 수 있습니다. 예를 들어, 입력 파일이 주어진 경우 :

2 3
2 2
1 2
2 1
1 1

을 사용 sort -n -k 1하여 첫 번째 열과 두 번째 열별로 정렬 된 출력을 얻습니다.

1 1
1 2
2 1
2 2
2 3

그러나 다음과 같이 두 번째 열 순서를 유지하고 싶습니다.

1 2
1 1
2 3
2 2
2 1

sort명령으로 가능 합니까?



답변

이것을 시도하십시오 :

sort -s -n -k 1,1

-s지정된 키의 일부가 아니 었 다에 정렬 정렬 비활성화 ‘마지막 수단’.

-k 1두 번째 열을 정렬하려고하면 당신이 볼 수 있듯이, 실제로 평균 “이 필드와 다음의 모든”숫자 정렬의 맥락에서 않습니다. 당신은 단지 나머지 줄로 가면서 관계가 깨지는 것을보고있을뿐입니다. 그러나 일반적 으로 필드 1 에서만-k 1,1 정렬 하도록 지정해야합니다 .


답변

첫 번째 열에서만 정렬하려면 다음을 수행하십시오.

sort -n -s -k1,1

에서 유닉스와 리눅스 시스템 관리 핸드북

sort는 키 사양 -k3 (-k3,3이 아닌)을 허용하지만 예상 한대로 수행하지 않을 수 있습니다. 종료 필드 번호가 없으면 정렬 키는 줄 끝까지 계속됩니다.


답변

제공된 답변 중 어느 것도 나를 위해 일반적으로 효과가 없습니다.

모두 sort -s -k 2 file1sort -n -k1,1이 파일에 추가 정렬을 수행합니다

# cat file1
 3 3 5
 3 2 3
 1 4 7
 0 1 2
 3 2 1

방금이 정확한 작업을 수행하고 쉘 루프를 사용했습니다. 정렬 된 열의 각 고유 값에 대해 전체 파일을 읽어야하므로이 솔루션은 매우 큰 파일에서 제대로 작동하지 않을 수 있습니다.

여기에서 파일은 열 2에서만 정렬됩니다.

# awk '{print $2}' file1 | sort | uniq | while read index
do
    awk -v var=$index '$2 == var { print $0}' file1
done
 0 1 2
 3 2 3
 3 2 1
 3 3 5
 1 4 7