Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 28
1

Сравнение двух текстовых файлов

29.06.2020, 15:43. Просмотров 1140. Ответов 14
Метки нет (Все метки)

Добрый день. задача следующая. Есть два текстовых файла, при этом один файл находится на удаленном сервере (доступ по авторизации), другой локально на диске. Необходимо сравнить содержимое этих файлов на идентичность. Конечно можно было бы авторизоваться, зайти на сервер, скопировать файл локально и сравнить скриптом, но как то все долго, тем более что сравнивать надо периодически. Хотелось бы иметь скрипт, который автоматом заходит на удаленный сервер (можно в скрипте прописать учётные данные) , берет оттуда файл и сравнивает с эталоном (лежит локально). В качестве результата сравнения выдает сообщение "изменён" или "не изменён". А если изменён, выдает номер изменённой строки. Помогите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2020, 15:43
Ответы с готовыми решениями:

Парсинг больших текстовых файлов
Добрый день! В общем столкнулся с задачей отпарсить текстовик на 4 миллиона строк (в примере код...

Сравнение содержимого двух текстовых файлов построчно
Здравствуйте! Очень нужна помощь! Есть текстовый файл 1.txt (50 строк), текстовый файл 2.txt...

Сравнение содержимого двух текстовых файлов построчно
Доброго всем дня. Есть три текстовых файла. В первом 1.txt - список "зеленых" IP. Во второй 2.txt -...

Сравнение двух текстовых файлов и вывод уникальных строк в третий файл
Здравствуйте необходим батник, который сравнивает два текстовых файла и выводит уникальные строки в...

14
2691 / 1225 / 211
Регистрация: 10.12.2013
Сообщений: 4,139
29.06.2020, 16:50 2
эталон тоже меняется периодически ?
что из себя представляет удалённый сервер? ( ОС, установлен ли powershell; если да, то какая версия ? если нет, то какой есть способ доступа - SSH, FTP, SMB ? )

в чём заключается помощь - написать вместо тебя ?
0
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 28
29.06.2020, 17:47  [ТС] 3
Эталон постоянен

Добавлено через 2 минуты
Windows serv 2012. Powershell есть. Версию сейчас не скажу. Впринципе скрипт ясравнения написал. Не понимаю как с powershell туда стукнуть я и прочитать сам файл.
0
2691 / 1225 / 211
Регистрация: 10.12.2013
Сообщений: 4,139
29.06.2020, 17:54 4
https://docs.microsoft.com/en-... ke-command
0
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 28
29.06.2020, 17:56  [ТС] 5
С доступом разобрался. Как выдавать номер строки, которая отличается от строки в эталоне?
0
20 / 13 / 7
Регистрация: 03.06.2020
Сообщений: 27
29.06.2020, 19:47 6
Цитата Сообщение от mikhail8899 Посмотреть сообщение
Как выдавать номер строки, которая отличается от строки в эталоне?
PowerShell
1
(Select-String -NotMatch -Path 1.txt (Get-Content 2.txt)).LineNumber

Наверное лучше будет напрямую, Select-String неточен, а Compare-Object не показывает номера строк

PowerShell
1
2
3
$a = Get-Content 1.txt
$b = Get-Content 2.txt
0..($a.Length - 1) | Foreach-Object { if ($a[$_] -ne $b[$_]) { $_ + 1 }}
1
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 28
30.06.2020, 04:22  [ТС] 7
Спасибо! То что надо. Вот только есть один момент, может подскажите. Если в середине второго файла добавить любой символ, выдаётся номер не совпадающей строки. А если добавить символ в конце файла, он не выдает номер строки. Так как данной строки в эталоне нет. Как это исправить?

Добавлено через 19 минут
Точнее если добавить строку в конце файла второго файла, не ыдает номер строки
0
20 / 13 / 7
Регистрация: 03.06.2020
Сообщений: 27
30.06.2020, 08:42 8
Цитата Сообщение от mikhail8899 Посмотреть сообщение
Как это исправить?
Наверное просто указать, что в файле больше или меньше строк.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$a = Get-Content 1.txt
$b = Get-Content 2.txt
 
if ($a.Length -gt $b.Length) { '2.txt has {0} lines less' -f ($a.Length - $b.Length) }
if ($a.Length -lt $b.Length) { '2.txt has {0} lines more' -f ($b.Length - $a.Length) }
 
0..($a.Length - 1) | Foreach-Object {
 
    if ($b[$_]) {
 
        if ($a[$_] -ne $b[$_]) { $_ + 1 }
    }
}
0
126 / 90 / 34
Регистрация: 20.02.2019
Сообщений: 499
02.07.2020, 08:44 9
Может все таки хеши сравнивать?
1
20 / 13 / 7
Регистрация: 03.06.2020
Сообщений: 27
02.07.2020, 10:18 10
Лучший ответ Сообщение было отмечено mikhail8899 как решение

Решение

Цитата Сообщение от alhaos Посмотреть сообщение
Может все таки хеши сравнивать?
Можно и хэши строк (а не файлов), так как нужны их номера:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Get-StringHash ($string)
{
    $bytes = [IO.MemoryStream]::new([byte[]][char[]]$string)
    return (Get-FileHash -InputStream $bytes -Algorithm md5).hash
}
 
$a = Get-Content 1.txt | ForEach-Object { Get-StringHash $_ }
$b = Get-Content 2.txt | ForEach-Object { Get-StringHash $_ }
 
if ($a.Length -gt $b.Length) { '2.txt has {0} lines less' -f ($a.Length - $b.Length) }
if ($a.Length -lt $b.Length) { '2.txt has {0} lines more' -f ($b.Length - $a.Length) }
 
0..($a.Length - 1) | Foreach-Object {
 
    if ($b[$_]) {
 
        if ($a[$_] -ne $b[$_]) { $_ + 1 }
    }
}
Алгоритм хэша может быть любой допустимый.
1
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 28
02.07.2020, 11:00  [ТС] 11
Спасибо большое. Все отлично работает
0
126 / 90 / 34
Регистрация: 20.02.2019
Сообщений: 499
02.07.2020, 15:22 12
Практической сути не пойму, если добавить в файл одну строку в начале все строки перестанут совпадать

PowerShell
1
2
3
4
5
6
7
8
function test {
param (
    $filename1 = 'D:\tmp\file1.txt',
    $filename2 = 'D:\tmp\file2.txt'
)
    (Get-FileHash -Path $filename1).Hash -eq  (Get-FileHash -Path $filename2).Hash
}
test
Добавлено через 2 минуты
Опять же проблемы с дубликатами строк, оно надо?

Добавлено через 3 минуты
еще файл с измененным порядком строк считать идентичным?
0
2691 / 1225 / 211
Регистрация: 10.12.2013
Сообщений: 4,139
02.07.2020, 16:58 13
забей
0
20 / 13 / 7
Регистрация: 03.06.2020
Сообщений: 27
02.07.2020, 19:15 14
Цитата Сообщение от alhaos Посмотреть сообщение
Опять же проблемы с дубликатами строк, оно надо?
Конечно нам этого не надо. Нам вообще не надо сравнивать файлы.
0
2691 / 1225 / 211
Регистрация: 10.12.2013
Сообщений: 4,139
03.07.2020, 02:01 15
если надо, то юниксовая diff сделает всё, что необходимо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2020, 02:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сравнение текстовых файлов
Имеетеся батник, который считывает строку из одного текстового файла, сравнивает ее с аналогичной...

Сравнение содержимого набора текстовых файлов
Уважаемые знатоки, не откажите в помощи новичку! Задача такова - необходимо взять много *.c;*.h...

Сравнение текстовых файлов и создание символических ссылок на имеющие различия
Задание: Сравнить текстовые файлы дерева, содержащие искомую последовательность символов между...

Сравнение двух файлов.
Привет всем. В БАТ тольуо учусь, сильно не пинайте. В общем, задача такая: 1 текстовый файл...

Сравнение двух файлов
Есть два лог-файла. Один вчерашний, другой сегодняшний. Необходимо в третий файл вывести новые...

Сравнение содержимого двух файлов
Какой командой можно сравнить содержимое двух файлов и вывести результат в другой файл. Comp и FC...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.