У меня есть программа для присвоения серийных номеров на клиентском ПК (Windows XP). Он записывает журнал в общий файловый ресурс сервера (Windows Server 2003), а также локально в случае сетевой ошибки. (Это означает, что подавляющее большинство строк находится в обоих файлах.) Время от времени запись в журнал сервера не выполняется. Есть ли хороший способ объединить два файла журнала, восстановив недостающие записи?
Я бы предпочел не делать полную копию; в настоящее время есть некоторые данные, которые есть только на копии сервера, и я также хочу оставить открытой возможность использования нескольких станций.
Выполнить интерактивное слияние должно быть довольно просто, но я бы предпочел что-то автоматическое, так как в основном это объединение наборов в строках файлов.
Нет эффективного способа сделать это с помощью встроенных команд. Проще всего было бы использовать что-то вроде 'sort' и 'uniq' из UnxUtils:
cat log1.txt log2.txt | sort | uniq > output.txt
Это в основном добавляет два текстовых файла, сортирует их (я предполагаю, что каждая строка начинается с серийного номера или даты), а затем удаляет повторяющиеся строки.
Более эффективным было бы написать небольшую утилиту или сценарий, который открывает оба файла, считывает их по одной строке за раз и записывает на выходе, следя за тем, чтобы каждая запись записывалась только один раз.
Это довольно легко сделать в PowerShell. При условии надлежащей локальной и сетевой безопасности это можно сделать с помощью следующего кода:
$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
Если у меня это прямо, у вас есть два файла журнала с простым текстом. Вы можете использовать команду копирования Windows, чтобы объединить два файла.
copy log1.txt+log2.txt finallog.txt
Это хорошо, потому что, если имена файлов журнала статичны, вы можете создать простой сценарий bat для запуска команды. Даже если файлы не статичны, вы можете запросить файл bat для файлов, которые вы хотите объединить.
Проблема в том, что файлы в основном просто присоединяются друг к другу. На самом деле нет способа проверить даты записи журнала, чтобы недостающие записи были вставлены в исходный файл с помощью этого сценария.