유닉스 정렬에 대한 -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 file1
와 sort -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