Задать вопрос

Как найти и вывести повторяющиеся строки в текстовом файле?

Имеется два текстовых файла содержащие строки: file_0.txt и file_1.txt. Количество строк может быть разным. Длина строк может быть разной. Файлы содержат большое количество строк. Необходимо эффективно вывести в другой файл строки, которые содержатся одновременно в двух файлах.
Пример:
Содержимое файла file_0.txt:
file_0.txt
j43j72h531
b2x891ow52
rr35986z77
x77jm9lp7g
q0pprcp52yawc10
wh3h476m2u
e7h0cv6rh5
5l7i700939
l3ri0p8p2f
l1h14no300

Содержимое файла file_1.txt:
file_1.txt
l1h14no300
j2615a2e0y
815555v33h
q0pprcp52yawc10
2vhhh0ugxv
rc2jl8lhdl
79qn640321
b2x891ow52

Необходимое содержимое файла file_2.txt после работы программы/команды:
file_2.txt
b2x891ow52
q0pprcp52yawc10
l1h14no300

Я пытался это сделать с помощью CMD команды findstr но в выводе получал почему-то не все совпадающие строки, хотя их наличие я проверял вручную. На процессоре i5-8400 скорость сравнения 100'000 строк в одном и 100'000 в другом файле меня вполне устраивает: 10-15 секунд.
Подскажите команду CMD/PowerShell или программу, чтобы сделать задуманное.
  • Вопрос задан
  • 2662 просмотра
Подписаться 4 Простой 6 комментариев
Решения вопроса 2
@MaxKozlov Куратор тега PowerShell
Похоже, вам поможет нечто типа того (почти на c#):
$c = [string[]](Get-Content .\0.txt)
$sk1 = [System.Collections.Generic.HashSet[string]]::new($c)
$c = [string[]](Get-Content .\1.txt)
$sk2 = [System.Collections.Generic.HashSet[string]]::new($c)
$sk1.IntersectWith($sk2)
$sk1

на ваших данных выдало то что надо (правда, не сортированное в том же порядке)
Ну и по памяти - всё в память грузится
Ответ написан
Комментировать
@AAT666
$f0 = Get-Content -Path C:\tmp\file_0.txt
$f1 = Get-Content -Path C:\tmp\file_1.txt

[system.linq.enumerable]::Intersect([object[]]$f0, [object[]]$f1) | Out-File -FilePath C:\tmp\file_2.txt
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@kalapanga
Я бы на Вашем месте постарался разобраться, что это за строки такие, которые сейчас в результат не попадают. Возможно они не такие уж и одинаковые.
Findstr здесь просится. Тем более, что по скорости устраивает.
Ответ написан
@azarij
В меру опытный никто
а так?

(Compare-Object -ReferenceObject (get-content c:\test\1.txt) -DifferenceObject (get-content c:\test\0.txt) -ExcludeDifferent -IncludeEqual).inputobject | out-file c:\test\2.txt
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы