Как удалить дубликаты слов или строк, сравнив два текстовых файла с помощью пакетной обработки? - PullRequest
0 голосов
/ 12 июня 2019

Я запускаю программу для удаления дублирующихся строк, сравнивая два текстовых файла с помощью пакета.

Это для моего личного использования, чтобы ускорить мою работу, удалив повторяющиеся строки из двух текстовых файлов.

Я использую приведенный ниже код,

copy textfile1.txt output.txt >nul
findstr /lvxig:textfile1.txt textfile2.txt >>output.txt

textfile1.txt содержит,

apple
orange
mango

textfile2.txt содержит,

apple
mango
grapes

Я ожидаю, что вывод в output.txt,

orange
grapes

Но вывод, который я получаю output.txt, равен

apple
orange
mango
grapes

Я не хочу объединять два текстовых файла. Я хочу удалить похожий дубликат, сравнив эти два текстовых файла.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

А как насчет этого подхода:

findstr /LVXIG:"textfile2.txt" "textfile1.txt" > "output.txt"
findstr /LVXIG:"textfile1.txt" "textfile2.txt" >>"output.txt"

Или с обычным перенаправлением :

(
    findstr /LVXIG:"textfile2.txt" "textfile1.txt"
    findstr /LVXIG:"textfile1.txt" "textfile2.txt"
) > "output.txt"

Используя данные вашего примера, первая командная строка findstr возвращает:

orange

А второй выводит:

grapes
0 голосов
/ 13 июня 2019

Как насчет создания хеша и подсчета вхождений? Затем используйте только те из них, которые имеют одно (1) вхождение. Это позволит избежать чтения обоих файлов дважды.

=== undupe.ps1

$hash = @{}
Get-Content 'testfile1.txt', 'testfile2.txt' | ForEach-Object { $hash[$_]++ }
foreach ($key in $hash.Keys) { if ($hash[$key] -eq 1) { Write-Output $key } }

Запустите его из командной оболочки или скрипта .bat.

powershell -NoLogo -NoProfile -File "undupe.ps1" >output.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...