我有以下 CSV 文件
此文件定义了系统中存在哪些 Linux 机器以及它们的 IP
我的目标是从这个文件创建主机文件
请指教如何从我的 CSV 文件创建主机文件作为示例 1(我需要匹配 CSV 文件中的 IP 地址并将其放在主机文件的第一个字段上,然后匹配 LINUX 名称并在 sec 字段中找到此名称 - 如示例 1 所示)
备注 - 应该由 sed 或 awk 或 perl 执行..,我需要在我的 bash 脚本中编写解决方案
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
答案1
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";'
答案2
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