Проблема сценария оболочки для сравнения различий между двумя файлами. [Linux] - PullRequest
0 голосов
/ 17 декабря 2009

Теперь моя программа генерирует два файла данных. a.txt и b.txt Возьмите a.txt в качестве примера, его содержимое выглядит так:

0,0
0,1
1,0
-3,1
1,-2
1,3
......

b.txt похож на a.txt.

Теперь я надеюсь выяснить количество различий. Другими словами, например, если b.txt так:

0,0
1,1
1,2
-3,1
1,-2
1,3
......

вывод сценария оболочки 2, поскольку 2-я и 3-я строки различаются, но одно число отличается. Как это сделать ???

Я пытаюсь использовать команду diff, но не могу получить то, что хочу ...

Нужна ваша помощь ... Спасибо.

Дополнительно: Есть около 10000-10000 строк для каждого файла. Конечно, у них же нет. строк в каждый момент времени.

Ответы [ 4 ]

4 голосов
/ 17 декабря 2009
diff a.txt b.txt | grep "<" | wc -l
3 голосов
/ 17 декабря 2009

Столкнулся с той же проблемой некоторое время назад. Что вам нужно, это diffstat. Diffstat является частью пакета diff GNU и может суммировать результаты diff:

СИНТАКСИС

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

Вы также можете обработать вывод diffstat, чтобы получить обобщенные результаты:

diff -u FileA.txt FileB.txt | diffstat -f0 | файлы grep -v | awk '{print $ 3}'

Где -u обязательно. Вы можете изучить документацию diffstat для параметров.

1 голос
/ 17 декабря 2009

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

join -t'\0' -v2 <(cat -n a.txt) <(cat -n b.txt) | wc -l
1 голос
/ 17 декабря 2009

diff кажется именно тем, что вы хотите.

#> diff a.txt b.txt
2,3c2,3
< 0,1
< 1,0
---
> 1,1
> 1,2

Есть что-то более конкретное, что вы искали?

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