如何删除 XML 文件中特定标记内的重复行

如何删除 XML 文件中特定标记内的重复行

假设您有以下文件:

...
<tag2>
    a
    b
    c
    a
</tag2>
...
<tag2>
    x
    y
    y
    z
    x    
</tag2>

如何删除每个行中的重复行,<tag2>如下例所示?

...
<tag2>
    a
    b
    c
</tag2>
...
<tag2>
    x
    y   
    z
</tag2>

我想搜索目录和子目录中的每个文件并删除这些重复项。

答案1

XSLT 2.0解决方案:

<xsl:template match="tag2">
  <tag2>
    <xsl:value-of select="distinct-values(tokenize(., '&#xa;'))"/>
  </tag2>
</xsl:template>

答案2

不确定您的文件有多复杂,但对于给出的示例来说,这似乎可行。

$ awk '/^<[a-z]/{print;delete z}!/^</{z[$0]=1}/^<\//{for(x in z){print x}print}' file1
<tag2>
    a
    b
    c
</tag2>
<tag2>
    x
    y
    z
</tag2>
$

评论版

awk '/^<[a-z]/ {         # If start tag
         print           #     Print line
         delete z        #     Clear array
     } !/^</ {           # If not a tag
         z[$0]=1         #     Store line
     } /^<\// {          # If end tag
         for(x in z) {   #     For each array entry
             print x     #         Print array entry
         }
         print           #     Print end tag
     }' file1

相关内容