Сравнение двух файлов в терминале linux



есть два файла под названием "a.txt" и "b.txt" у обоих есть список слов. Теперь я хочу проверить, какие слова лишние в "a.txt" и "b.txt".



Мне нужен эффективный алгоритм, как мне нужно сравнить два словаря.

651   9  

9 ответов:

Если у вас установлен vim,попробуйте следующее:

vimdiff file1 file2

или

vim -d file1 file2

вы найдете его фантастическим.enter image description here

сортировать их и использовать comm:

comm -23 <(sort a.txt) <(sort b.txt)

comm сравнивает (сортирует) входные файлы и по умолчанию выводит три столбца: строки, уникальные для a, строки, уникальные для b, и строки, присутствующие в обоих. При указании -1,-2 и/или -3 вы можете отключить соответствующий вывод. Поэтому comm -23 a b перечисляет только те записи, которые уникальны для a. я использую <(...) синтаксис для сортировки файлов на лету, если они уже отсортированы тебе не нужен этот.

можно использовать diff инструмент в linux для сравнения двух файлов. Вы можете использовать -- changed-group-format и -- unchanged-group-format функции для фильтрации необходимых данных.

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

  • '%

  • '%> ' получить строки из FILE2

  • " (пустая строка) для удаления линий от оба файла.

например: diff --changed-group-format="%

  [root@vmoracle11 tmp]# cat file1.txt 
    test one
    test two
    test three
    test four
    test eight
    [root@vmoracle11 tmp]# cat file2.txt 
    test one
    test three
    test nine
    [root@vmoracle11 tmp]# diff --changed-group-format='%<' --unchanged-group-format='' file1.txt file2.txt 
    test two
    test four
    test eight

попробовать sdiff (man sdiff)

sdiff -s file1 file2

если вы предпочитаете стиль вывода diff от git diff, вы можете использовать его с --no-index флаг для сравнения файлов не в репозитории git:

git diff --no-index a.txt b.txt

используя пару файлов с примерно 200k строками имен файлов в каждом, я сравнивал (со встроенным timecommand) этот подход против некоторых других ответов здесь:

git diff --no-index a.txt b.txt
# ~1.2s

comm -23 <(sort a.txt) <(sort b.txt)
# ~0.2s

diff a.txt b.txt
# ~2.6s

sdiff a.txt b.txt
# ~2.7s

vimdiff a.txt b.txt
# ~3.2s

comm кажется, самый быстрый на сегодняшний день, в то время как git diff --no-index кажется, самый быстрый подход для diff-стиля выход.


обновление 2018-03-25 вы можете на самом деле опустить --no-index флаг, если вы не находитесь внутри репозитория git и хотите сравнить неотслеженные файлы в этом репозитории. От man pages:

эта форма предназначена для сравнения заданных двух путей в файловой системе. Вы можете опустить параметр --no-index при выполнении команды в рабочем дереве, управляемом Git, и по крайней мере один из путей указывает вне рабочего дерева, или при выполнении команды вне рабочего дерева, управляемого Git.

вы также можете использовать: colordiff: отображение вывода diff с цветами.

о vimdiff: Он позволяет сравнивать файлы через SSH, например:

vimdiff /var/log/secure scp://192.168.1.25/var/log/secure

извлечено из: http://www.sysadmit.com/2016/05/linux-diferencias-entre-dos-archivos.html

использовать comm -13(требуется отсортировать файлы):

$ cat file1
one
two
three

$ cat file2
one
two
three
four

$ comm -13 <(sort file1) <(sort file2)
four

кроме того, не забываем о mcdiff - внутренний просмотрщик различий GNU Midnight Commander.

например:

mcdiff file1 file2

наслаждайтесь!

вот мое решение для этого :

mkdir temp
mkdir results
cp /usr/share/dict/american-english ~/temp/american-english-dictionary
cp /usr/share/dict/british-english ~/temp/british-english-dictionary
cat ~/temp/american-english-dictionary | wc -l > ~/results/count-american-english-dictionary
cat ~/temp/british-english-dictionary | wc -l > ~/results/count-british-english-dictionary
grep -Fxf ~/temp/american-english-dictionary ~/temp/british-english-dictionary > ~/results/common-english
grep -Fxvf ~/results/common-english ~/temp/american-english-dictionary > ~/results/unique-american-english
grep -Fxvf ~/results/common-english ~/temp/british-english-dictionary > ~/results/unique-british-english

Comments

    Ничего не найдено.