bash脚本将XML数据提取为列格式
尝试将xml数据从多个字符串输出动态提取(数据更改)为列格式 当我对一个SQL数据库运行查询时,大约有100个XML位发出回声bash脚本将XML数据提取为列格式,bash,awk,scripting,xmlstarlet,xmllint,Bash,Awk,Scripting,Xmlstarlet,Xmllint,尝试将xml数据从多个字符串输出动态提取(数据更改)为列格式 当我对一个SQL数据库运行查询时,大约有100个XML位发出回声 油灰 某人 2014-10-27T11:53:59.8993492-04:00 真的 真的 云服务客户端交付\Willis\Linux\Test-SJC 77e96d52-f165-482f-8389-ffb95b9d8ccd infullscreen模式 主机名-H-A10D 真的 假的 10.0.0.100 10.0.0.100 IBM437 C24位 不要玩
油灰
某人
2014-10-27T11:53:59.8993492-04:00
真的
真的
云服务客户端交付\Willis\Linux\Test-SJC
77e96d52-f165-482f-8389-ffb95b9d8ccd
infullscreen模式
主机名-H-A10D
真的
假的
10.0.0.100
10.0.0.100
IBM437
C24位
不要玩
771324d1-0c59-4f12-b81e-96edb5185ef7
无论主机是Dev、Prod还是Test,您都没有在XML文件中提到任何参数
但是从上面的XML文件中,您可以使用以下方法获得名称
$cat test.xml |grep Name |awk -F '[<,>]' '{print $3}' |xargs
Hostname-H-A10D 10.0.0.100
$cat test.xml | grep Name | awk-F'[]'''{print$3}'| xargs
主机名-H-A10D 10.0.0.100
最好使用XML解析器
使用awk
:
$ awk -F'[<>]' 'BEGIN{a["D"]="Dev";a["Q"]="Test"} /Name/{name=$3; type=a[substr(name,length(name))]; if (length(type)==0) type="Prod";} /SessionHost/{print type, name, $3;}' s.xml
Dev Hostname-H-A10D 10.0.0.100
$awk-F'[]”开始{a[“D”]=“Dev”;a[“Q”]=“Test”}/Name/{Name=$3;type=a[substr(Name,length(Name))];if(length(type)==0)type=“Prod”}/SessionHost/{print type,Name,$3;}'s.xml
Dev Hostname-H-A10D 10.0.0.100
工作原理
这定义了关联数组BEGIN{a[“D”]=“Dev”;a[“Q”]=“Test”}
a
在具有主机名的行上,这将捕获主机名,并从中确定主机类型/Name/{Name=$3;type=a[substr(Name,length(Name))];if(length(type)==0)type=“Prod”}
在包含主机IP的行上,打印类型、名称和IP/SessionHost/{打印类型,名称,$3;}
cat
与能够读取数据的程序一起使用,例如grep
和awk
。2.您不需要同时使用grep
和awk
。下面是一个命令:awk-F'[]'/Name/{printf”%s',$3}END{print'}test.xml
Perfect!很不错的。我不知道awk内的阵列构建。谢谢,先生。您也能在这里帮忙吗?谢谢