使用xml_grep提取xml文件中的某些字段并保存到tsv文件中

时间:2015-09-02 17:00:32

标签: xml

我需要在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;
&#13;
&#13;

我需要在这两个标签之间提取文字:

&#13;
&#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;
&#13;
&#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的每一行的结构一致。

0 个答案:

没有答案