Awk

按連續數字排序為單個數字

  • September 21, 2019

命令輸出:

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'

這不是最優雅的解決方案,但它有效。

引用自:https://unix.stackexchange.com/questions/543019