두 가지 정렬 옵션 -n
과 의 차이점은 무엇입니까 -g
?
너무 자세한 내용이 있고 문서가 충분하지 않아 약간 혼란스럽습니다.
답변1
긴 이야기 짧게
-n
예를 들어 간단한 부동 소수점 숫자를 정렬 하지만 1.234
이 -g
옵션은 더 넓은 범위의 숫자 형식을 처리할 수 있지만 속도가 느립니다.
이는 또한 -g
POSIX 사양에 대한 GNU 확장입니다.
에서 man sort
관련 부분은 다음과 같습니다.
-g, --general-numeric-sort, --sort=general-numeric
Sort by general numerical value. As opposed to -n, this option
handles general floating points. It has a more permissive format
than that allowed by -n but it has a significant performance
drawback.
...
-n, --numeric-sort, --sort=numeric
Sort fields numerically by arithmetic value. Fields are supposed
to have optional blanks in the beginning, an optional minus sign,
zero or more digits (including decimal point and possible thou-
sand separators).
...
STANDARDS
The sort utility is compliant with the IEEE Std 1003.1-2008 (``POSIX.1'')
specification.
The flags [-ghRMSsTVz] are extensions to the POSIX specification.
...
NOTES
...
When sorting by arithmetic value, using -n results in much better perfor-
mance than -g so its use is encouraged whenever possible.
info
그러나 완전한 문서는 에서 제공됩니다 man
.
~에서7.1 정렬: 텍스트 파일 정렬, 설명/차이점은 더 명확합니다.
‘-g’
‘--general-numeric-sort’
‘--sort=general-numeric’
숫자로 정렬하여 각 행의 접두사를 긴 배정밀도 부동 소수점으로 변환합니다. 바라보다부동 소수점. 오버플로, 언더플로 또는 변환 오류는 보고되지 않습니다. 다음 조합 순서를 사용하십시오.
- 숫자로 시작하지 않는 줄(모두 동일한 것으로 간주됨)
- NaN(IEEE 부동 소수점 연산의 "숫자가 아닌" 값)은 일관되지만 시스템에 따라 순서가 다릅니다.
- 음의 무한대.
- 오름차순의 유한수(- 포함)0그리고 +0동일한).
- 게다가 무한대.
다른 선택이 없는 경우에만 이 옵션을 사용하십시오.
--numeric-sort
(-n
)보다 속도가 훨씬 느리고 부동 소수점으로 변환할 때 정보가 손실될 수 있습니다.이 옵션을 사용하면 고정 너비가 아니거나 대소문자가 다른 "
0x
" 또는 " " 접두사가 붙은0X
16진수를 정렬 할 수 있습니다. 그러나 대소문자가 일치하고0
왼쪽에 ' '를 채워 일관된 너비를 달성하는 16진수 숫자의 경우 표준 사전 정렬이 더 빠릅니다....
‘-n’
‘--numeric-sort’
‘--sort=numeric’
숫자순으로 정렬합니다. 숫자는 각 줄을 시작하며 선택적 공백, 선택적 "
-
" 기호, 천 단위 구분 기호로 구분된 0개 이상의 숫자, 선택적으로 소수점 문자 및 0개 이상의 숫자로 구성됩니다. 빈 숫자는 " "로 처리됩니다0
. 로캘은LC_NUMERIC
소수점 문자와 천 단위 구분 기호를 지정합니다. 기본적으로 공백은 공백 또는 탭 문자이지만LC_CTYPE
지역 설정에 따라 이를 변경할 수 있습니다.비교적 정확합니다. 반올림 오류가 없습니다.
+
선행 ' ' 및 지수 표기는 인식되지 않습니다. 이러한 문자열에 대해 수치 비교를 수행하려면--general-numeric-sort
(-g
) 옵션을 사용하십시오.
빠른 데모:
$ printf '%s\n' 0.1 10 1e-2 | sort -n
0.1
1e-2
10
$ printf '%s\n' 0.1 10 1e-2 | sort -g
1e-2
0.1
10