命令输出如下:
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
答案1
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。
答案2
请尝试这个:
output | awk '{print gensub("[^0-9]*","","g") " " $0 }' | sort -n | awk '{$1=""; print $0}' | sed 's/^ //g'
这不是最优雅的解决方案,但它确实有效。
答案3
答案(我确信其中之一)是:
sort -t _ -k 2 -g [filename with names+numbers or piped from another command with | - both situations will work ]