我有一个在客户端 PC (Windows XP) 上分配序列号的程序。它将日志写入服务器文件共享 (Windows Server 2003),并在发生网络错误时在本地写入。(这意味着绝大多数行都在两个文件中。)每隔一段时间,对服务器日志的写入确实会失败。有没有合并两个日志文件的好方法,恢复丢失的条目?
我宁愿不做完整的副本;目前有一些数据只在服务器副本上,我也想保留多站的可能性。
进行交互式合并应该相当容易,但我更喜欢自动的,因为它基本上是文件行上的 set-union。
我有一个在客户端 PC (Windows XP) 上分配序列号的程序。它将日志写入服务器文件共享 (Windows Server 2003),并在发生网络错误时在本地写入。(这意味着绝大多数行都在两个文件中。)每隔一段时间,对服务器日志的写入确实会失败。有没有合并两个日志文件的好方法,恢复丢失的条目?
我宁愿不做完整的副本;目前有一些数据只在服务器副本上,我也想保留多站的可能性。
进行交互式合并应该相当容易,但我更喜欢自动的,因为它基本上是文件行上的 set-union。
使用内置命令无法有效地做到这一点。最简单的方法是使用UnxUtils中的 'sort' 和 'uniq' 之类的东西:
这基本上附加了两个文本文件,对它们进行排序(我假设每一行都以序列号或日期开头),然后删除重复的行。
更有效的方法是编写一个小的实用程序或脚本来打开两个文件,一次读取一行,然后写入输出,确保每个条目只写入一次。
这可以在 PowerShell 中轻松完成。假设适当的本地和网络安全,以下代码可以完成此操作:
如果我直截了当,那么您有两个纯文本日志文件。您可以使用 windows 复制命令来合并这两个文件。
这很好,因为如果日志文件名是静态的,您可以制作一个简单的 bat 脚本来运行该命令。即使文件不是静态文件,您也可以让 bat 文件提示您要合并的文件。
问题是这些文件基本上只是相互附加。在这种情况下,确实无法检查日志条目日期以将丢失的条目插入到原始文件中。