次のようなファイルがあるとしましょう。
...
<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(., '
'))"/>
</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