정렬된 데이터가 포함된 파일이 있고 다른 키의 데이터 순서를 파괴하지 않고 한 키의 값을 기준으로 파일을 재정렬하고 싶습니다.
GNU 정렬이 내가 지정하지 않은 키 값을 기반으로 행 정렬을 수행하는 것을 방지하려면 어떻게 해야 합니까? 또는 정렬 시 GNU 정렬이 키 범위를 무시하도록 지정하려면 어떻게 해야 합니까?
파일 데이터.txt:
1 Don't
2 C
1 Sort
2 B
1 Me
2 A
예상 출력:
1 Don't
1 Sort
1 Me
2 C
2 B
2 A
주문하다:
sort -k 1,1 <data.txt
결과: 내가 요청한 원치 않는 정렬이 없습니다.
1 Don't
1 Me
1 Sort
2 A
2 B
2 C
답변1
너 하나 필요해안정적인 정렬. 에서 man sort
:
-s, --stable
stabilize sort by disabling last-resort comparison
지금 바로:
$ sort -sk 1,1 <data.txt
1 Don't
1 Sort
1 Me
2 C
2 B
2 A
키가 숫자인 경우 -n
또는가 필요할 수도 --numeric-sort
있습니다(예를 들어 기본 어휘 정렬 순서를 사용하여 10과 2를 비교할 때 예기치 않은 결과가 나타날 수 있음). 이 경우 다음을 수행하면 됩니다.
sort -sn <data.txt
전체 행의 숫자 해석은 첫 번째 필드의 숫자 해석과 동일하므로 첫 번째 필드를 추출할 필요가 없습니다.
답변2
options 이 부족한 (GNU가 아닌) sort
구현의 경우 -s
언제든지 다음을 수행할 수 있습니다.
<data.txt awk '{print NR "\t" $0}' | sort -n -k 2,2 -k 1,1 | cut -f 2-
즉, 줄 번호 앞에 두 번째 정렬 키를 만든 다음 제거합니다.