这是我的文件中的文件名的子集:
profile_10_1_1
profile_10_1_2
profile_1_1_1
我正在尝试按升序对它们进行数字排序,即从 1 开始。我使用了以下命令
sort -n filename
还尝试了这个:
sort -nk filename
但拥有 10 个的将始终位于列表的顶部。
如何编写命令来获得所需的输出:
profile_1_1_1
profile_1_1_2
....
profile_9_1_1
....
profile_10_1_1
答案1
FreeBSD 和 GNU对此sort
有一个选择。-V
sort -V < filename
GNUls
有一个-v
选项。因此,如果这些文件确实存在,您可以执行以下操作:
xargs -d '\n' < filename ls -dv --
zsh
具有参数扩展标志以对数组进行数字排序:
printf '%s\n' ${(fno)"$(<filename)"}
否则,为了可移植,你必须这样做:
sort -t_ -k1,1 -k2,2n -k3,3n -k4,4n -k5,5n filename
答案2
-V
正是你想要的。
-V, --version-sort
natural sort of (version) numbers within text
至少可以在 GNU 中工作sort
。