如何使用bash腳本對與字元串+數字組合的字元串進行排序?
這是我要排序的數據。但是
sort
將數字處理為字元串,數據沒有按我的預期排序。/home/files/profile1
/home/files/profile10
/home/files/profile11
/home/files/profile12
/home/files/profile14
/home/files/profile15
/home/files/profile16
/home/files/profile2
/home /files/profile3
/home/files/profile4
/home/files/profile5
/home/files/profile6
/home/files/profile7
/home/files/profile8
/home/files/profile9
我想把這個排序,
/home/files/profile1
/home/files/profile2
/home/files/profile3
/home/files/profile4
/home/files/profile5
/home/files/profile6
/home/files/profile7
/home/files/profile8
/home /files/profile9
/home/files/profile10
/home/files/profile11
/home/files/profile12
/home/files/profile14
/home/files/profile15
/home/files/profile16
bash腳本有什麼好方法嗎?我不能在這裡使用 ruby 或 python 腳本。
您可以使用臨時標記字元來分隔數字:
$ sed 's/\([0-9]\)/;\1/' log | sort -n -t\; -k2,2 | tr -d ';'
在這裡,標記字元是’;’ - 它不能是您想要排序的任何文件名的一部分 - 但您可以交換 ‘;’ 任何你喜歡的角色。您必須相應地更改
sed
,sort
和tr
部分。管道的工作原理如下:該
sed
命令在任何數字之前插入標記,該sort
命令將標記解釋為欄位分隔符,使用第二個欄位作為數字排序鍵進行排序,該tr
命令再次刪除標記。並
log
表示輸入文件 - 您也可以將輸入通過管道傳輸到sed
.
這與這個問題非常相似。問題是您有一個要排序的字母數字欄位,並且
-n
沒有明智地對待它,但是版本排序 (-V
) 可以。因此使用:sort -V
請注意,GNU、FreeBSD 和 OpenBSD 排序實現目前支持此功能。