打印单独的同一组中的每个网络集

打印单独的同一组中的每个网络集

目前我的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

seen[$2]=seen[$2]"\n "$1;;意味着打印一个ewline-space,当它具有相同的第二列时,\n后跟第一列值,并追加到相同的键索引中,并将结果保存在相同键的值中。$1seen[$2]=...=seen[$2]...

END陈述,awk当所有记录/行读取时,最终执行此块,并且我们使用 for 循环来迭代名为见过并首先打印密钥,然后打印密钥的值。

相关内容