自动合并日志文件,保留所有行

我有一个程序在客户端PC(Windows XP)上分配序列号。 它将日志写入服务器文件共享(Windows Server 2003),并在本地发生networking错误。 (这意味着绝大多数行都在两个文件中)。每隔一段时间,写入服务器日志都会失败。 有没有一种合并两个日志文件,恢复缺less的条目的好方法?

我宁愿不做一个完整的副本; 目前有一些数据只在服务器上拷贝,而我也想留下多个站的可能性。

做一个交互式合并应该相当容易,但是我更喜欢自动化的东西,因为它基本上是在文件行上设置的。

这可以在PowerShell中轻松完成。 假设适当的本地和networking安全,下面的代码可以完成这个:

$networkLog = "\\server\share\mylog.log" $localLog = "C:\mylog.log" # Append local log to network log Add-Content $networkLog (Get-Content $localLog) # Take newly appended network log, sort, filter only unique entries, save Get-Content $networkLog | Sort-Object | Get-Unique | Out-File $networkLog 

内置的命令没有办法做到这一点。 最简单的方法就是使用UnxUtils中的 “sort”和“uniq”

 cat log1.txt log2.txt | sort | uniq > output.txt 

这基本上附加了两个文本文件,对它们进行sorting(我假设每行都以序号或date开头),然后删除重复的行。

更有效率的方法是编写一个小的实用程序或脚本来打开这两个文件,一次只读一行,然后写入输出,确保只写入一次。

如果我有这个笔直的,你有两个纯文本日志文件。 您可以使用windows复制命令来合并这两个文件。

 copy log1.txt+log2.txt finallog.txt 

这很好,因为如果日志文件名是静态的,你可以使用一个简单的bat脚本来运行命令。 即使这些文件不是静态的,你也可以让bat文件提示你想要合并的文件。

问题是这些文件基本上只是追加到对方。 检查日志条目的date实际上没有办法将缺less的条目插入到使用此scheme的原始文件中。