如何按数字顺序对具有 VLAN 的网络设备进行排序

如何按数字顺序对具有 VLAN 的网络设备进行排序

我正在尝试为一些具有多个 NIC 和 VLAN 的嵌入式设备创建一个整洁的 motd。

以下是示例输出:

Networking      sent  recv tx-err rx-err address
enp7s0     UP   66K   154     0     0   10.10.0.4
enp7s0.10  UP     0    17     0     0   10.1.10.4
enp7s0.2   UP     0    17     0     0   10.1.2.1
enp7s0.3   UP     0    17     0     0   10.1.3.4
tun0       UP     0    17     0     0   10.x.x.x

我希望上面的输出将 enp7s0.10 作为最后一项。如下所示:

enp7s0     UP   66K   154     0     0   10.10.0.4
enp7s0.2   UP     0    17     0     0   10.1.2.1
enp7s0.3   UP     0    17     0     0   10.1.3.4
enp7s0.10  UP     0    17     0     0   10.1.10.4
tun0       UP     0    17     0     0   10.x.x.x

我尝试使用 对输出进行排序sort -t "." -n -k 2,虽然结果很接近,但并没有完全满足我的需求。我真正需要的是两层排序:首先按前缀排序(即“。”左侧的所有内容),然后按后缀排序。

我正在努力用纯 bash 完成这项工作。我想避免使用 perl 或 python 来完成这项工作(因为我运行的硬件 CPU 很少),宁愿忍受无法清理它的轻微烦恼。

有任何想法吗?

答案1

sort -V如果您的‘排序’版本具有此功能,请使用“版本排序” 。

还有一个natsort用 C 语言编写的工具,我思考它的新位置是https://github.com/sourcefrog/natsort

我不会避免使用 Perl,一个完全独立的 Perl(甚至 PHP)脚本通常可以比调用大量 greps 和 seds 和其他外部工具的 shell 脚本更快地完成工作。

相关内容