Sort
“sort -n”和“sort -g”有什麼區別?
-n
這兩個排序選項和有什麼區別-g
?有太多細節但沒有足夠的文件有點令人困惑。
TL;博士
雖然
-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 sort: Sort text files開始,描述/區分更加清晰:
‘-g’
‘--general-numeric-sort’
‘--sort=general-numeric’
按數字排序,將每行的前綴轉換為長雙精度浮點數。請參閱浮點數。不要報告上溢、下溢或轉換錯誤。使用以下整理順序:
- 不以數字開頭的行(都被認為是相等的)。
- NaN(“非數字”值,在 IEEE 浮點算術中)以一致但與機器相關的順序。
- 負無窮大。
- 以數字升序排列的有限數字(- 0和 + 0相等)。
- 加上無窮大。
只有在別無選擇時才使用此選項;它比
--numeric-sort
(-n
) 慢得多,並且在轉換為浮點數時可能會失去資訊。您可以使用此選項對前綴為 ’
0x
’ 或 ’0X
’ 的十六進制數字進行排序,其中這些數字不是固定寬度或大小寫不同。但是,對於一致大小寫的十六進制數字,並用 ’ ’ 填充0
到一致的寬度,標準的字典排序會更快。…
‘-n’
‘--numeric-sort’
‘--sort=numeric’
按數字排序。數字從每一行開始,由可選的空格、可選的 ’
-
’ 符號和零個或多個可能由千位分隔符分隔的數字組成,可選後跟一個小數點字元和零個或多個數字。空號被視為“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