Awk
按連續數字排序為單個數字
命令輸出:
file_0 file_1 file_10 file_11 file_12 file_13 file_14 file_15 file_2 file_3 file_4 file_5 file_6 file_7 file_8 file_9
如何使用 awk 或其他一些 posix 工具按連續數字將其實際排序為單個數字:
file_0 file_1 file_2 file_3 file_4 file_5 file_6 file_7 file_8 file_9 file_10 file_11 file_12 file_13 file_14 file_15
一般來說,如果數字在文件名內,它也應該工作,例如:
file_0.txt file_1.txt file_10.txt file_11.txt file_12.txt file_13.txt file_14.txt file_15.txt file_2.txt file_3.txt file_4.txt file_5.txt file_6.txt file_7.txt file_8.txt file_9.txt
sort -nt '_' -k2
輸出:
file_0 file_1 file_2 file_3 file_4 file_5 file_6 file_7 file_8 file_9 file_10 file_11 file_12 file_13 file_14 file_15
或者:
file_0.txt file_1.txt file_2.txt file_3.txt file_4.txt file_5.txt file_6.txt file_7.txt file_8.txt file_9.txt file_10.txt file_11.txt file_12.txt file_13.txt file_14.txt file_15.txt
使用 FreeBSD 和 GNU coreutils 實現進行測試,
sort
但不適用於busybox
實現。使用的所有選項都由 POSIX指定。
請試試這個:
output | awk '{print gensub("[^0-9]*","","g") " " $0 }' | sort -n | awk '{$1=""; print $0}' | sed 's/^ //g'
這不是最優雅的解決方案,但它有效。