我可以对 ip 地址的输出进行排序吗?

我可以对 ip 地址的输出进行排序吗?

我有一个带有数百个网络接口的路由器(当然,其中大部分是虚拟的)。这意味着输出

ip a

显示的线条非常多,给管理和分析带来了困难。项目 1 到 255 按项目编号排序,但从 256 开始,在排序之前计算数字 mod 256,这意味着它们是交错的(例如 256、257、1、258、2...):

# ip a s up
256: veth-99-02@br-vxlan-99-02: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ab:cd:ef:99:88:77 brd ff:ff:ff:ff:ff:ff
    inet 10.2.99.254/24 scope global veth-99-02
       valid_lft forever preferred_lft forever
257: vxlan-22-01: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br-vxlan-20-01 state UNKNOWN group default qlen 1000
    link/ether ab:cd:ef:99:88:77 brd ff:ff:ff:ff:ff:ff
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
258: br-vxlan-22-01: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
    link/ether ab:cd:ef:99:88:77 brd ff:ff:ff:ff:ff:ff
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether ab:cd:ef:99:88:66 brd ff:ff:ff:ff:ff:ff

有没有办法按数字正确排序此输出? (它们是多行条目,所以| sort -n不行。)

或者,我可以选择显示数字,例如最多 42 个吗?

我尝试按类型 ( ) 选择ip a s type ...,但这实际上不起作用。

答案1

有一个选项可以在单独的行中输出每个信息-o

-o, -oneline
将每个记录输出在一行上,用“\”字符替换换行符。当您想要使用 wc(1) 或 grep(1) 输出对记录进行计数时,这很方便。

所以ip -o a s up |sort -n应该做这项工作;ip -o a s up |sort -n |tr '\\' '\n'如果需要的话,您可以将这些反斜杠转换回换行符。

似乎在使用-o选项时,它会丢失一些信息(我不知道为什么);那么您可以在传递给排序命令之前使用以下 awk 预处理替代方案:

ip a s up \
| awk '{ printf "%s" (NR>1 && /^[0-9]+:/?"\0":(NR>1?"\n":"")) $0 }' \
| sort -nz \
| tr '\0' '\n'

即在每个接口块之间添加空字符,然后使用 sort with 对-z空分隔记录的输入进行排序,最后使用 将这些空字符恢复为换行符tr

答案2

使用 GNU awk:

ip a s up | gawk '
  match($0, /^([0-9]+): /, m) {
    if (prev) ip[prev] = lines
    prev = m[1]
    lines = ""
  }
  { lines = lines $0 RS }
  END {
    if (prev) ip[prev] = lines
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (num in ip) print ip[num]
  }
'

相关内容