我需要在XML文件中提取已定义的字段列表,然后将它们保存到tsv文件中,并使用制表符分隔提取的字段。例如,在此xml文件中:
<?xml version="1.0"?>
<PC-AssayDescription
xmlns="http://www.ncbi.nlm.nih.gov"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://www.ncbi.nlm.nih.gov ftp://ftp.ncbi.nlm.nih.gov/pubchem/specifications/pubchem.xsd"
>
<PC-AssayDescription_aid>
<PC-ID>
<PC-ID_id>720001</PC-ID_id>
<PC-ID_version>1</PC-ID_version>
</PC-ID>
</PC-AssayDescription_aid>
<PC-AssayDescription_aid-source>
<PC-Source>
<PC-Source_db>
<PC-DBTracking>
<PC-DBTracking_name>ChEMBL</PC-DBTracking_name>
<PC-DBTracking_source-id>
<Object-id>
<Object-id_str>887744</Object-id_str>
</Object-id>
</PC-DBTracking_source-id>
</PC-DBTracking>
</PC-Source_db>
</PC-Source>
</PC-AssayDescription_aid-source>
<PC-AssayDescription_name>Inhibition of rabbit ERG channel assessed as decrease in monophasic action potential duration</PC-AssayDescription_name>
&#13;
我需要在这两个标签之间提取文字:
<PC-ID_id>720001</PC-ID_id>
<PC-AssayDescription_name>Inhibition of rabbit ERG channel assessed as decrease in monophasic action potential duration</PC-AssayDescription_name>
&#13;
我使用了这个批处理脚本:
#!/bin/bash
for f in *.xml
do
((xml_grep 'PC-ID_id' $f --text_only; xml_grep 'PC-AssayDescription_name' $f --text_only;) | tr '\n' ' '; echo) >> result.tsv
done
如果我运行脚本,它将生成如下的tsv文件:
720001(标签)抑制兔ERG通道评估为单相动作电位持续时间的减少
多个XML文件的结果将被放入不同的行中。如果所有XML文件在这两个标记之间都有非空白文本,则result.tsv文件的每一行都将采用相同的格式(两个非空白列)。
但是,如果两个标记中的任何一个在XML文件中都有空白内容,则tsv文件的相应行中将缺少该标记,并更改该行的列格式。我需要的是,如果一个标签在XML文件中有空白内容,该脚本将返回一个&#34; N / A&#34;,这将保持result.tsv的每一行的结构一致。