using System.Text.RegularExpressions;
public static void Main()
const string FileContent1 =
@"--- 10.0.0.6 ping statistics ---
50 packets transmitted, 49 packets received, 2% packet loss
round-trip min/avg/max = 20.917/70.216/147.258 ms
PING 10.0.0.6 (10.0.0.6): 56 data bytes
--- 10.0.0.6 ping statistics ---
50 packets transmitted, 50 packets received, 0% packet loss
round-trip min/avg/max = 29.535/65.768/126.983 ms
const string FileContent2 =
@"--- 10.0.0.6 ping statistics ---
50 packets transmitted, 49 packets received, 2% packet loss
round-trip min/avg/max = 20.917/70.216/147.258 ms
PING 10.0.0.6 (10.0.0.6): 56 data bytes
--- 10.0.0.6 ping statistics ---
50 packets transmitted, 50 packets received, 0% packet loss
round-trip min/avg/max = 29.535/65.768/126.983 ms
PING 10.0.0.6 (10.0.0.6): 56 data byte
--- 10.0.0.6 ping statistics ---
50 packets transmitted, 44 packets received, 12% packet loss
round-trip min/avg/max = 30.238/62.772/102.959 ms
PING 10.0.0.6 (10.0.0.6): 56 data bytes";
var logBlockPattern = new Regex(@"(^---.*ping statistics ---$)\s+"
+ @"(^.+packets transmitted.+packets received.+packet loss$)\s+"
+ @"(^round-trip min/avg/max.+$)\s+"
var logBlocks1 = logBlockPattern.Matches(FileContent1).Cast<Match>().ToList();
var logBlocks2 = logBlockPattern.Matches(FileContent2).Cast<Match>().ToList();
var mergedLogBlocks = logBlocks1.Concat(logBlocks2.Where(lb2 => logBlocks1.All(lb1 => lb1.Groups[4].Value != lb2.Groups[4].Value)));
var mergedLogContents = string.Join("\n\n", mergedLogBlocks);
Console.WriteLine(mergedLogContents);