Sort
如何對單行分隔項進行數字排序?
我有一行(或多行)由任意字元分隔的數字。我可以使用哪些 UNIX 工具對每行的項目進行數字排序,同時保留分隔符?
範例包括:
- 號碼列表;輸入:
10 50 23 42
; 排序:10 23 42 50
- IP地址; 輸入:
10.1.200.42
; 排序:1.10.42.200
- CSV;輸入:
1,100,330,42
; 排序:1,42,100,330
- 管道分隔;輸入:
400|500|404
; 排序:400|404|500
由於分隔符是任意的,請隨意使用您選擇的單字元分隔符提供(或擴展)答案。
gawk -v SEP='*' '{ i=0; split($0, arr, SEP); len=asort(arr); while ( ++i<=len ){ printf("%s%s", i>1?SEP:"", arr[i]) }; print "" }' infile
用您的分隔符替換
*
為欄位分隔符。SEP='*'
您也可以在單行的情況下使用以下命令(因為最好不要使用 shell-loops 進行文本處理)
tr '.' '\n' <<<"$aline" | sort -n | paste -sd'.' -
用你的分隔符替換點
.
。添加
-u
到sort
上面的命令以刪除重複項。注意:
您可能需要使用
-g, --general-numeric-sort
選項sort
而不是-n, --numeric-sort
來處理任何類型的數字(整數、浮點數、科學、十六進制等)。$ aline='2e-18,6.01e-17,1.4,-4,0xB000,0xB001,23,-3.e+11' $ tr ',' '\n' <<<"$aline" |sort -g | paste -sd',' - -3.e+11,-4,2e-18,6.01e-17,1.4,23,0xB000,0xB001
awk
無需更改,它仍然會處理這些。