Grep сравнить два файла

Обновлено: 07.07.2024

Я хотел бы знать, какая строка в b.txt содержит слова из a.txt и сколько их?

Первая строка содержит 'green' и 'apple' (2) Вторая строка ничего не содержит. Третья строка содержит 'bar' (1)

Это все, что я хотел бы знать.

Но его нужно модифицировать.

2 ответа

Как напечатать только разные строки двух текстовых файлов в GREP? Мне нужно напечатать только строки, которых нет во втором текстовом файле. Спасибо.

Попробуйте что-нибудь вроде этого:

Попробуйте что-нибудь вроде этого:

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

У меня есть коллекция текстовых файлов unicode (экспортированных из regedit), и я хотел бы вытащить все строки с определенным текстом на них. Я пробовал Grep для Windows и findstr, но оба, похоже.

У меня есть два текстовых файла с 2.4M. Мне нравится сравнивать, в чем заключаются различия в этих двух текстовых файлах. Я использовал Компаре. Это сработало, но это медленно для большого размера.

Есть ли там утилита или сторонняя библиотека для сравнения двух текстовых файлов в flex? Предположим, что я загрузил два разных текстовых файла с помощью 'FileReference', и теперь я хочу сравнить.

Как напечатать только разные строки двух текстовых файлов в GREP? Мне нужно напечатать только строки, которых нет во втором текстовом файле. Спасибо.

У меня есть 2 текстовых файла, один со списком параметров реестра с удаленного сервера и один с предпочтительными настройками реестра. Файлы отформатированы одинаково, т. е.: ServValues.txt.

Фон Я разрабатываю простую службу windows, которая отслеживает определенные каталоги для событий создания файлов и регистрирует их-короче говоря, чтобы выяснить, был ли файл скопирован из каталога A.

У меня есть два текстовых файла с данными, разделенными запятыми. Я хочу сравнить и выяснить разницу между содержимым этих двух файлов. Как это сделать с помощью PowerShell. Я получаю количество.

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

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

помогите сделать быстрее, или раскритикуйте вдребезги мой нубовской подход, прошу толчек в нужном направлении.

P.S. если бы не нужно было вывыодить всю строку из файла 2 проблема думаю решилась бы с помощю
comm -2 file1 file2 > file3 но не факт :)

Оценить 1 комментарий

нужно во втором файле найти строки (и вывести всю строку в файл) у которых совпадает $1 и $3 но другой $6
в первойм файле $6=q1 во втором $6=q1-q3
столбец $1 всегда начинается с 9

Это не описание, а какая-то ахинея, по которой можно написать сто разных программ.

Приведи лучше уменьшенные исходные файлы (по паре строк каждый) и файл с результатом, который должен из них получиться.


Укажите первым файлом тот, что поменьше.

martin74ua

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

если можно - примеры файлов по несколько сотен строк дайте мылом, попробую написать

Простите не совсем точно обяснил
в 1 файле 1 столбец уникальный таких записей милинон 3й столбец не уникальный на милион уникальных где то 2000(мешать нельзя, и во втором файле есть много записей $1 но с другими $3 и $6)

вот а теперь нужно взять вот это сочетание $1 и $3 найти его в 2 файле и отбросить те где $6=q1 а результат в файл

к сожелению поэтапность тут не поможет(((((

cat /tmp/file22.txt | awk -F"," '' > /tmp/comand
эта команда какраз и делает то что вы предложили берет 1 и 3 столбцы из 1 файла и значение для 6 столбца и ищет их в файле 2

martin74ua

это вы так думаете, что не поможет ;)
дайте пример, поколдую.

Adamos

Строки с несовпадающим $6 вы уже выкинули.
Перегоняем оба файла в формат $1,$3, отбрасывая прочую информацию и убирая дубли.
Сортируем, находим пересечение этих файлов.
Перегоняем второй в формат $1,$3,$2,$4,$5,$6,$7 и сортируем.
На своем любимом языке программирования открываем этот файл (1) и файл пересечений (2), сравнивая текущую строку в файле (2) с началом текущей строки в файле (1).
Если они совпадают - выводим, переставив столбцы.
Если нет - читаем следующую строку из файла, строка в котором оказалась меньше другого (данные-то отсортированы).
В один проход получаем результат, никаких недель.

Огромное спасибо за идеи по решению, решил осваивать perl =)
Сергей спасибо вам . немного почитал переделал и вуаля готово)))

Adamos Руслан Федосеев и вам спасибо применил ваши советы для предварительной подготовки файла к запуску основного скрипта в других его вариациях (не представленно ниже)


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

Я написал код, но он не работал. Как это написать?

Чтобы просто проверить, совпадают ли два файла, используйте cmp -s :

Если ваши два входных файла содержит список путей файлов, которые вы хотите сравнить, используйте двойной цикл, например:

Здесь результат создается как на терминале, так и в файле file-comparison.out .

Предполагается, что ни один путь в двух входных файлах не содержит встроенных символов новой строки.

Код сначала считывает все пути из одного из файлов в массив, files1 , с помощью mapfile . Я делаю это, чтобы не читать этот файл более одного раза, так как нам придется просматривать все эти пути для каждого пути в другом файле. Вы заметите, что вместо чтения из $filelist1 во внутреннем цикле я просто перебираю имена в files1 массив.

  • мне нужна полная программа в оболочке bash
  • @santhoshreddy См. обновленный ответ.

Самый простой способ - использовать команду diff .

пример:

предположим, что первый файл file1.txt и он содержит:

и второй файл file2.txt

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

diff file1.txt file2.txt

Давайте посмотрим, что означает этот вывод. Важно помнить, что когда diff описывает вам эти различия, он делает это в предписывающем контексте: он сообщает вам, как изменить первый файл, чтобы он соответствовал второму файлу. Первая строка вывода diff будет содержать:

  • номера строк, соответствующие первому файлу,
  • буква (a для добавления, c для изменения или d для удаления)
  • номера строк, соответствующие второму файлу.

Вот чистый сценарий оболочки bash для сравнения файлов:

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

Итак, в основном, что я хочу сделать, это сравнить два файла за строкой по столбцу 2. Как я мог выполнить это?

Посмотрите на команду diff . Это хороший инструмент, и вы можете прочитать все об этом, введя man diff в свой терминал.

Команда, которую вы хотите сделать, это diff File_1.txt File_2.txt , которая выведет разницу между ними и будет выглядеть примерно так:

введите описание изображения здесь>> </p> <p> Быстрая заметка при чтении вывода из третьей команды: «стрелки» (<code>---- +: = 3 =: + ----</code> и <code>---- +: = 4 =: + ----</code>) ссылаются на то, что значение строки находится в левом файле (<code>---- +: = 5 =: + ----</code>) и правый файл (<code>---- +: = 6 =: + ----</code>), причем левым файлом является тот, который вы ввели первым в командной строке, в этом случае <code>---- +: = 7 = + ----</code> </p> <p> Кроме того, вы можете заметить, что 4-я команда - это <code>---- +: = 8 =: + ----</code>, которая передает результаты из <code>---- +: = 9 = : + ----</code> в <code>---- +: = 10 =: + ----</code>, который затем помещает этот вывод в файл, чтобы вы могли его сохранить для более позднего, если вы не хотите просматривать все это на консоли в эту секунду. </p></body></html>

Или вы можете использовать Meld Diff

Meld помогает сравнивать файлы, каталоги и контролируемую версию проекты. Он обеспечивает двух- и трехстороннее сравнение обоих файлов и каталогов и поддерживает многие популярные системы управления версиями.

Установите с помощью:

введите описание изображения здесь

введите описание изображения здесь>> </p> <p> Пример с полным текстом: </p> <p> <img src whoanswered

ответил Achu 25 августа 2014, 19:57:51

Вы можете использовать vimdiff .

Meld - отличный инструмент. Но вы также можете использовать diffuse для визуального сравнения двух файлов:

введите описание изображения здесь>> </p></body></html>

Скопируйте сценарий в пустой файл, сохраните его как compare.py , сделайте его исполняемым, запустите его командой:

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

Для печати в файл:

Для печати в окне терминала:

Вы можете использовать команду cmp :

FWIW, мне больше нравится то, что я получаю от бок о бок вывод из diff

даст что-то вроде:

Дополнительный ответ

Если вам не нужно знать, какие части файлов отличаются, вы можете использовать контрольную сумму файла. Существует много способов сделать это, используя md5sum или sha256sum

Рассмотрим сценарий ниже, где вы можете дать два файла в качестве аргументов, и файл скажет вам, являются ли они одинаковыми или нет.

Более старый ответ

Кроме того, существует команда comm , которая сравнивает два отсортированных файла и дает результат в 3-х столбцах: столбец 1 для элементов, уникальных для файл №1, столбец 2 для элементов, уникальных для файла № 2, и столбец 3 для элементов, присутствующих в обоих файлах.

Чтобы подавить любой столбец, вы можете использовать переключатели -1, -2 и -3. Использование -3 показывает линии, которые отличаются.

Ниже вы можете увидеть снимок экрана команды в действии.

введите описание изображения здесь

Существует только одно требование - файлы должны быть отсортированы для их надлежащего сопоставления. sort может использоваться для этой цели. Bellow - это еще один снимок экрана, где файлы сортируются, а затем сравниваются. Строки, начинающиеся с левого звонка только в File_1, строки, начинающиеся с столбца 2, принадлежат только File_2

введите описание изображения здесь>> </p></body></html>

Простым способом является использование colordiff , который ведет себя как diff , но окрашивает его вывод. Это очень полезно для чтения diff. Используя ваш пример,

, где опция u предоставляет унифицированный diff. Вот как выглядит раскрашенный diff:

Читайте также: