linux +通过sed或awk或perl从CSV文件创build主机文件

我有以下CSV文件

这个文件定义了哪个Linux机器存在于系统中,并且存在ip

我的目标是从这个文件创build主机文件

请教如何从我的CSV文件创build主机文件(我需要将CSV文件的IP地址匹配到主机文件的第一个字段,然后匹配LINUX名称,并在第二个字段中find这个名称 – 例如1)

备注 – 应该由sedawkperl ..执行,我需要在我的bash脚本中写解决scheme

CSV文件

, machine , VM-LINUX1 , SZ , Phy , 10.213.158.18 , PROXY , VM-LINUX2 , SZ , 10.213.158.19 , OLD HW , VM-LINUX3 , SZ , 10.213.158.20 , , VM-LINUX4 , SZ , Phy , 10.213.158.21 , , VM-LINUX5 , SZ , Phy , OUT , EXT , LAN3 , 10.213.158.22 , INTERNAL , VM-LINUX6 , SZ , Phy , 10.213.158.23 , , server , new HW , VM-LINUX7 , SZ , Phy , 10.213.158.24 , OUT, LAN3 , VM-LINUX8 , SZ , 10.213.158.25 , OLD HW , machine , VM-LINUX9 , SZ , Phy , INT , 10.213.158.26 , LAN2, AN45, , VM-LINUX10 , SZ , Phy , 10.213.158.27 , , VM-LINUX11 , SZ , Phy , LAN5 , 10.213.158.28 , 

示例1(主机文件)

  10.213.158.18 VM-LINUX1 10.213.158.19 VM-LINUX2 10.213.158.20 VM-LINUX3 10.213.158.21 VM-LINUX4 10.213.158.22 VM-LINUX5 10.213.158.23 VM-LINUX6 10.213.158.24 VM-LINUX7 10.213.158.25 VM-LINUX8 10.213.158.26 VM-LINUX9 10.213.158.27 VM-LINUX10 10.213.158.25 VM-MACHINE8 10.213.158.26 STAR9 10.213.158.27 TOP10 10.213.158.28 SERVER11 

cat file | perl -ne '/(\w+-LINUX\w+).*\s([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/;print "$2 $1\n";'

 perl -ne 'print "$1 $2\n" if m/(VM-LINUX\d+).*(\d+\.\d+\.\d+\.\d+)/;' < /PATH/TO/your.csv 

或者(如果甚至不确定这两个字段的顺序)

 perl -ne 'print "$1 " if m/(VM-LINUX\d+)/; print "$1" if m/(\d+\.\d+\.\d+\.\d+)/; print "\n";' < /PATH/TO/your.csv