我一直试图在其他帖子中找到解决方案,但似乎没有人是准确的。我正在努力寻找从文件中删除重复行的方法。从例如,一个文件RTNameList.txt其内容为
DBParticipant:JdbcDataSource:appdb
DBParticipant:JdbcDataSource:appdb
HttpType:HttpClientConfiguration:Prochttp
HttpType:HttpClientConfiguration:Prochttp
我只想将唯一的行写入另一个文件 RTNameList-Final.txt .请建议使用 Ant 脚本的最佳解决方案。我在下面使用过,但它不起作用。
<loadfile srcfile="${ScriptFilesPath}/RTNameList.txt" property="src.file.head">
<filterchain>
<sortfilter/>
<uniqfilter/>
</filterchain>
</loadfile>
<echo file="${ScriptFilesPath}/RTNameList-Final.txt">${src.file.head}</echo>
预期输出:文件 RTNameList-Final.txt 应包含的内容为
DBParticipant:JdbcDataSource:appdb
HttpType:HttpClientConfiguration:Prochttp
Ant 不是一种编程语言。下面的示例使用嵌入的 groovy 脚本来处理该文件。
例
├── build.xml
├── src
│ └── duplicates.txt
└── target
└── duplicatesRemoved.txt
src/duplicates.txt
DBParticipant:JdbcDataSource:appdb
DBParticipant:JdbcDataSource:appdb
HttpType:HttpClientConfiguration:Prochttp
HttpType:HttpClientConfiguration:Prochttp
目标/重复已删除.txt
DBParticipant:JdbcDataSource:appdb
HttpType:HttpClientConfiguration:Prochttp
构建.xml
<project name="demo" default="build">
<available classname="org.codehaus.groovy.ant.Groovy" property="groovy.installed"/>
<target name="build" depends="install-groovy">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
<groovy>
ant.mkdir(dir:"target")
def dups = [:]
new File("target/duplicatesRemoved.txt").withWriter { w ->
new File("src/duplicates.txt").withReader { r ->
r.readLines().each {
if (!dups.containsKey(it)) {
dups[it] = it
w.println(it)
}
}
}
}
</groovy>
</target>
<target name="install-groovy" unless="groovy.installed">
<mkdir dir="${user.home}/.ant/lib"/>
<get dest="${user.home}/.ant/lib/groovy.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.3.6/groovy-all-2.3.6.jar"/>
<fail message="Groovy has been installed. Run the build again"/>
</target>
</project>