You could use a pattern such as :
^(\S+)([ \t]+-?[0-9.]+){8}(?=.*?^\1)
(with the 'multiline' and 'singleline' options set) which will locate only those records that have a duplicate code . At least this would reduce the searching down to only those codes where you KNOW there is a duplicate.
If you use something like:
^(\S+)([ \t]+-?[0-9.]+){8}(?=.*?(^\1([ \t]+-?[0-9.]+)+\r?$))
then you can use the captures in match group #4 directly to get the values to substitute back into the original line. You can then use the position information in match group #3 to delete the second line. (Be careful doing this in that once you edit or delete a line, all of the position information for duplicate lines that are after the one edited/deleted will be wrong - you will need to either make the necessary adjustments to the offsets; or do one match, do the replacements and deletions (preferably backwards through the text), and then scan the whole text again for any more.
I don't know if I have misunderstood your requirements, but I see that some of the entries have only 5 numbers after the ID string and not 8. That is why I changed the '{8}' into '+' within the lookahead as this will then find 3 duplicated tags instead of just 1.
I have forced the tag to be at the start of a line - just in case!
Finally, I've used a '\r?' subpattern so that it will pick up the carriage return that .NET tends to add in as part of the line terminator.
Susan