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



@snrt5osp

Имеется два текстовых файла содержащие строки: 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 или программу, чтобы сделать задуманное.


Решения вопроса 0


Ответы на вопрос 4



@MaxKozlov

Похоже, вам поможет нечто типа того (почти на c#):

$c = [string[]](Get-Content ..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:tmpfile_0.txt
$f1 = Get-Content -Path C:tmpfile_1.txt

[system.linq.enumerable]::Intersect([object[]]$f0, [object[]]$f1) | Out-File -FilePath C:tmpfile_2.txt



@kalapanga

Я бы на Вашем месте постарался разобраться, что это за строки такие, которые сейчас в результат не попадают. Возможно они не такие уж и одинаковые.
Findstr здесь просится. Тем более, что по скорости устраивает.



@azarij

а так?

(Compare-Object -ReferenceObject (get-content c:test1.txt) -DifferenceObject (get-content c:test.txt) -ExcludeDifferent -IncludeEqual).inputobject | out-file c:test2.txt

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *