如何对包含“_”的行进行数字排序?

如何对包含“_”的行进行数字排序?

这是我的文件中的文件名的子集:

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

相关内容