2013-08-16 64 views
1

我有一个包含一些服务器的配置文件Nagios的目录:转换Nagios的配置文件到csv

define host { 
    host_name   server1.srv 
    hostgroups   linux-servers+holmes 
    check_interval   5 
} 

define host { 
    host_name   server2.srv 
    hostgroups   linux-servers+holmes 
    check_interval   5 
} 

我想要重新将数据转化成CSV所以我会得到:

host_name,hostgroups,check_interval 
server1.srv,linux-servers+holmes,5 
server2.srv,linux-servers+holmes,5 

我很高兴能用bash或PowerShell做到这一点,但我还不足以让脚本专家知道如何做到这一点......如果有人有一个建议,将不胜感激:)!

回答

2

这AWK应该工作:

awk 'BEGIN{print "host_name,hostgroups,check_interval"} /host_name/{v1=$2} /hostgroups/{v2=$2} /check_interval/{v3=$2} /}/{print v1","v2","v3; v1=v2=v3=""}' file 
+1

斯万你是一个传奇!像魅力一样工作:D非常感谢伴侣:) – Bluz

+0

只需要添加一点点评论即可。如果定义主机{}中缺少hostgroups或check_interval行,那么该命令将使用$ 2的最后值,这是不正确的。 你能告诉我如何得到这个排序? 非常感谢! – Bluz

+0

是的,如果你想要一个空字符串替换以前的值,只需在打印后将所有的v-变量设置为“...”打印v1“,”v2“,”v3; v1 = v2 = v3 =“”} ...'也编辑了答案。 – svante