HMC에서 각 VIO 서버 및 LPAR에 대한 VLAN 세부 정보를 수집하고 있습니다. 이러한 VLAN을 VSWITCHName=VLANID
쉼표로 구분된 Vwsitch로 그룹화해야 합니다 . 그러나 일부 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를 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