다음과 같은 파일이 있다고 가정해 보겠습니다.
...
<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