![AIX HMC Vswitch 和 VLAN 集合](https://linux22.com/image/132229/AIX%20HMC%20Vswitch%20%E5%92%8C%20VLAN%20%E9%9B%86%E5%90%88.png)
我正在从 HMC 收集每个 VIO 服务器和 LPAR 的 VLAN 详细信息。我需要将这些 VLAN 分组为一个 Vwsitch VSWITCHName=VLANID
,并用逗号分隔。但某些 VIO 服务器有 2 个 VSWITCHES。我想在单行上显示数据,因为我正在使用 for 循环来收集数据。
LAB1:~> lshwres -m system-01 -r virtualio --rsubtype eth --level lpar --filter lpar_names=ABC1234 -F vswitch:port_vlan_id:addl_vlan_ids
ETHERNET0:64:
ETHERNET0:2215:52,64
ETHERNET0:3969:701,702,2152,2154
ETHERNET0:4001:
LAB1:~> lshwres -m system-01 -r virtualio --rsubtype eth --level lpar --filter lpar_names=ABCD4567 -F vswitch:port_vlan_id:addl_vlan_ids
ETHERNET1:55:
ETHERNET1:3971:51,53,55
ETHERNET1:3972:2151,2153,2155
ETHERNET1:4002:
hmclab:~> lshwres -m system-01 -r virtualio --rsubtype eth --level lpar --filter lpar_names=ABCD7890 -F vswitch:port_vlan_id:addl_vlan_ids
ETHERNET0:52:
ETHERNET0:2152:
LAB1:~> lshwres -m system-01 -r virtualio --rsubtype eth --level lpar --filter lpar_names=ABCD7869 -F vswitch:port_vlan_id:addl_vlan_ids
ETHERNET0:54:4001
ETHERNET0:3968:52,54
ETHERNET1:3969:701,702,2152,2154,5569
ETHERNET1:4002:
ETHERNET1:5001
预期输出是:ETHERNET0= 52,54,3968,etc & ETHERNET1=5001,3969.701,
等
答案1
如果您想连接具有相同以太网编号的线路,并用:
a替换,
,那么您可以将输出通过管道传输到
awk -F: '
/ETHERNET/{ i = $1; v[i] = v[i] "," $2; if($3!="")v[i] = v[i] "," $3 }
END{ n = asorti(v,x)
for(j=1;j<=n;j++){ i = x[j]; print i "=" substr(v[i],2) }
}'
这会拆分 上的每一行:
,使用第一个字段ETHERNET0
作为关联数组 的索引v
,该数组收集字段 2 和 3(如果字段 3 不为空)。在输入结束时,数组的键(索引)被排序,因此我们可以从 开始输出ETHERNET0
,对于每个键,我们打印它和收集的字段,省略第一个字符,它总是一个额外的逗号,因为我们总是添加它位于字段 2 之前。
将每个命令视为独立的结果是:
ETHERNET0=64,2215,52,64,3969,701,702,2152,2154,4001
ETHERNET1=55,3971,51,53,55,3972,2151,2153,2155,4002
ETHERNET0=52,2152
ETHERNET0=54,4001,3968,52,54
ETHERNET1=3969,701,702,2152,2154,5569,4002,5001