현재 내 csv input
모습은 다음과 같습니다.
network_name,network_set
P1MSVmgmtvM,Data_NetworkSet_A
P1MSVvMotion,Data_NetworkSet_A
P2MSVmgmtvM,Data_NetworkSet_B
P2MSVvMotion,Data_NetworkSet_B
E1MSVEDGEiDMZRUE1,Edge_NetworkSet_A
E1MSVEDGEiEXPRUE1,Edge_NetworkSet_A
다음과 같은 출력을 원합니다. (각 네트워크 세트에 대해 연관된 네트워크 이름을 표시하고 싶습니다)
Data_NetworkSet_A
P1MSVmgmtvM
P1MSVvMotion
Data_NetworkSet_B
P2MSVmgmtvM
P2MSVvMotion
Edge_NetworkSet_A
E1MSVEDGEiDMZRUE1
E1MSVEDGEiEXPRUE1
답변1
당신이 사용할 수있는 awk
:
$ awk -F, 'NR>1{seen[$2]=seen[$2]"\n "$1;} END{for(x in seen) print x, seen[x]}' infile
Data_NetworkSet_A
P1MSVmgmtvM
P1MSVvMotion
Data_NetworkSet_B
P2MSVmgmtvM
P2MSVvMotion
Edge_NetworkSet_A
E1MSVEDGEiDMZRUE1
E1MSVEDGEiEXPRUE1
in seen[$2]=seen[$2]"\n "$1;
; 은 동일한 두 번째 열과 첫 번째 열 값이 있을 때 ewline-space를 인쇄하고 \n
동일한 키 인덱스에 추가하고 결과를 동일한 키 값에 저장하는 것을 의미합니다.$1
seen[$2]=...
=seen[$2]...
이것END
성명,앗이 블록은 모든 레코드/행을 읽을 때 최종적으로 실행되며 for 루프를 사용하여 명명된 항목을 반복합니다.본키를 먼저 인쇄한 다음 키 값을 인쇄합니다.