열 값을 기준으로 숫자순으로 정렬

열 값을 기준으로 숫자순으로 정렬

예를 들어 테스트 파일이 있는데 열 값을 기준으로 정렬하고 싶습니다. 뒤쪽에

awk -F'[:,]' '{print $16}' test.json

열 16에 대한 다음 출력을 얻습니다.

 123
 457
 68
 11
 939
 11
 345
 9
 199
 13745

이제 숫자로 정렬하고 싶을 때 다음을 사용합니다.

awk -F'[:,]' '{print $16}' test.json | sort -nk16

하지만 숫자 정렬 대신 다시 가져옵니다 ...

 11
 11
 123
 13745
 199
 345
 457
 68
 9
 939

이유는 무엇일까요, -n수치정렬에는 매개변수면 충분할 것 같은데...

답변1

의 출력에는 awk열이 하나만 포함되어 있으므로 열 16이 없습니다.

따라서 sort모두 동일한 빈 정렬 키를 보면 관찰되는 것은 마지막 종류의 정렬(전체 행에 대한 어휘 정렬)의 결과이며 -s일부 구현에서는 이 옵션을 사용하여 비활성화할 수 있습니다.

원하는 곳은 다음과 같습니다.

awk -F'[:,]' '{print $16}' test.json | sort -n

이제 열 16에서 파일을 정렬 하려면sort 문자 열 구분 기호가 하나만 지원되므로 입력을 전처리해야 합니다.

sed 's/[:,]/&+/g' test.json | sort -t+ -k16,16n | sed 's/\([:,]\)+/\1/g'

여기서 a는 +각각에 추가 :되거나 열 구분 기호 ,+정렬하고 다음 항목을 제거합니다 +.

관련 정보