LINUX.ORG.RU

Сравнение двух файлов по содержимому

 


0

1

Доброе время суток! Я новичок в линуксе настолько, что практически ничего там не знаю. И вот понадобилось сравнить два текстовых файла по содержимому. Нужно сравнить без использования кoманды diff, написавши bash-script. Например, в каждом из файлов есть среди потока текста и некие числа. Надо все эти числа вытащить и сравнить два файла исключительно и только по числам, а на текст не смотреть вообще. И еще есть условия: вытаскивать и сравнивать надо только ЦЕЛЫЕ ЧИСЛА ИЗ ДИАПАЗОНА INT32 и при сравнении чисел сравнивать их, как текст. Например, есть число 507 и 00507 — их считать разными числами… Вот и вопрос: в каком примерно двигаться направлении? Допустим, числа можно вытащить регуляркой. Ну и как проверить, что они соответствуют диапазону int32? И как, например, вытащивши все из двух файлов сравнить все это? Например, в одном файле окажется 5 чисел, в другом, например, 200…. Как обычно в таких случаях сравнивают файлы по содержимому по числам только? Спасибо за любую подсказку!

Надо было не прогуливать уроки.

bash-script

Скрипты пишут на POSIX шелле. Bash - только для интерактивной работы.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Именно так. если бы уроки не прогуливались, то, возможно бы даже и научили бы читать. Ибо в моем вопросе нигде не спрашивается, на чем именно писать скрипты. Умеющие читать это поймут…

SeaMan75
() автор топика

проверить, что они соответствуют диапазону int32?

Можете регулярками, можете операциями сравнения. Только перед стравнением нужно нули спереди убирать, иначе bash воспримит это как восьмеричное число.

И определитесь, знаковый или беззнаковый у вас диапазон int32.

И опять таки, как в ваших файлах разделяются числа? Вот, допустим, слово 0xA22 нужно проигнорировать, или считать, что это два числа — 0 и 22?

Как обычно в таких случаях сравнивают файлы по содержимому по числам только?

Никак. Никто таким не занимается. Вы можете из двух этих файлов сформировать два временных файла из чисел, по одному числу в строке и скормить эти временные файлы diff.

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

mky ★★★★★
()

Малыш, ты можешь не знать конкретные языки программирования, но опиши свои желания на псевдо-языке, опиши подробно входные файлы, как комп. будет находить в них числа, как будет сравнивать и т.д. и т.п. – это называется «алгоритм» решения задачи.

Реализация на конкретном языке дело десятое

futurama ★★★★★
()

Считаешь количество строк в файлах. Если не равно - они разные. Если равно, это значение берёшь в цикл, читаешь в цикле построчно оттуда и оттуда и вычитаешь одну строку из другой. Если не ноль - строки разные.

targitaj ★★★★★
()

И еще есть условия: вытаскивать и сравнивать надо только ЦЕЛЫЕ ЧИСЛА ИЗ ДИАПАЗОНА INT32 и при сравнении чисел сравнивать их, как текст. Например, есть число 507 и 00507 — их считать разными числами…

Ну и как проверить, что они соответствуют диапазону int32?

Вытаскивай регуляркой через sed проверяй прямо в лоб, да сравнивай: if [ "$num1" -gt "-2147483648" -a "$num1" -lt "2147483647" ] && [ "$num1" = "$num2" ]; then

Давай только дальше сам, а то ничему так и не научишься. Задача вообще очень странная — это какой-то тест? Где такие задают?

Как обычно в таких случаях сравнивают файлы по содержимому по числам только?

«Обычно» никак, потому что задача какая-то мегаспецифическая и точно не обычная.

CrX ★★★★★
()
Ответ на: комментарий от firkax

Это понятно изначально. Но даже для зачета можно приложить минимальные усилия доступные любому студенту.

futurama ★★★★★
()

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

Gennadevich
()
Ответ на: комментарий от CrX

Значит таки sed использовать…. Ну попробую его, спасибо. Дальше сам попробую, хотя с линухой особо дел и не имел… Задача не просто странная, она дебильно-шизоидная - это меня попросил помочь один студент и вот я подписался под этот шлак, думал побыстрому сделаю и забуду про нее…

SeaMan75
() автор топика

можно сделать стартап команду из нескольких человек попросить пользователей форума дать еду команда на асемблере будет пилить новый оператор для какого нибудь ЯП должен получиться вывод указывая два файла такой что видны целые числа которых нет в другом файле время для людей пол года
используя эльфийскую магию попросить двух людей читать файлы в слух слушать их и когда чувства различаются нарисовать посохом на песке эту разницу в чувстве

Gennadevich
()
Ответ на: комментарий от SeaMan75

хз, может и подойдёт. Но с sed и awk точно несложно, а для grep надо будет курить ключи, я вот из головы не помню, как там можно было бы только лишь найденные «слова» вывести, причём в том числе и несколько на строку.

CrX ★★★★★
()

Не надо, это путь в никуда.

Ну ладно, показывай что получилось сделать и что именно не получается.

grem ★★★★★
()
Ответ на: комментарий от Gennadevich

не надо никакой команды. Я в одиночку за умеренную плату на Ассемблере сравню что угодно. Вы какой предпочитаете чип? Могу для древнего 6502/6510. Могу для Zilog! Могу для PIC16,18 серий! Для 12 серии будет дороже! Могу для других контроллеров. Можно соорудить и для Intel…

SeaMan75
() автор топика
Ответ на: комментарий от grem

спасибо за предложение…. Но случилось страшное…. студентка не дождалась…. Теперь уже никому ничего не надо сравнивать ((((

SeaMan75
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.