目前我的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
后跟第一列值,并追加到相同的键索引中,并将结果保存在相同键的值中。$1
seen[$2]=...
=seen[$2]...
这END
陈述,awk当所有记录/行读取时,最终执行此块,并且我们使用 for 循环来迭代名为见过并首先打印密钥,然后打印密钥的值。