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

cwm*_*mwl 6 sort

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

profile_10_1_1
profile_10_1_2
profile_1_1_1
Run Code Online (Sandbox Code Playgroud)

我正在尝试按升序对它们进行数字排序,即从 1 开始。我使用了以下命令

sort -n filename
Run Code Online (Sandbox Code Playgroud)

也试过这个:

sort -nk filename
Run Code Online (Sandbox Code Playgroud)

但是有 10 个的将始终位于列表的顶部。

如何编写命令来获得所需的输出:

profile_1_1_1
profile_1_1_2
....
profile_9_1_1
....
profile_10_1_1
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 6

FreeBSD 和 GNUsort有一个-V选项。

sort -V < filename
Run Code Online (Sandbox Code Playgroud)

GNUls有一个-v选择。因此,如果这些文件确实存在,您可以执行以下操作:

xargs -d '\n' < filename ls -dv --
Run Code Online (Sandbox Code Playgroud)

zsh 有参数扩展标志来对数组进行数字排序:

printf '%s\n' ${(fno)"$(<filename)"}
Run Code Online (Sandbox Code Playgroud)

否则,便携地,你必须这样做:

sort -t_ -k1,1 -k2,2n -k3,3n -k4,4n -k5,5n filename
Run Code Online (Sandbox Code Playgroud)