2011-02-16 40 views
3

如果我有一個不同長度的十六進制數字的文件,例如從命令行排序不同長度的十六進制數字?

1F 
b 
c 

如何從命令行對它們進行排序?

Linux的解決方案是受歡迎的,但我會使用Windows和Cygwin或gnuwin32。

注意:我顯然不能使用SORT'cos,這會使它們保持錯誤的順序。

回答

6
cat thefile | while read line; do printf "%d %s\n" "0x$line" "$line"; done | sort -n | awk '{print $2}' 

這保留了原始的十六進制數的大/小寫。

0

嘗試sort -n filename。根據手冊頁的-n標誌「根據字符串數值進行比較」。

更新:正如@barlop指出的那樣,-n選項對於十六進制數不起作用。

+0

失敗,出現$ echo -e'1FFF \ nF000 \ nc'| sort -n'cos舉例說,具有更多F的那個被排序爲-n。也許它只是將行上的每個字符轉換爲ASCII碼並添加它們。沒有考慮到他們的立場。 – barlop 2011-02-16 19:11:52

+0

你說得對。我應該仔細檢查一下...... – mohit6up 2011-02-16 19:32:47

0

您可以使用awk腳本創建一個文件,將字符串左填充到固定長度,對結果文件進行排序,然後去除結果中的前導空格。

自從我使用awk以來已經有一段時間了,但正如我所記得的那樣,輸出正確的東西並不困難。

相關問題