Как найти разницу между 2 файлами в скрипте - PullRequest
3 голосов
/ 14 июля 2010

В каталоге 100 файлов и 2 пары файлов.

Я хочу найти разницу между двумя файлами в скрипте оболочки

File 1: 
Operating System : Windows XP
Operating System : Windows NT
Operating System : Windows 2008

FILE 2: 
Windows XP
Windows NT
Windows2008

(например, Windows 2008 (файл 1) и Windows2008 (файл2)).

Но, наконец, оба файла не имеют никакой разницы.

Как этого добиться?

Эти файлы на хосте linux и хотите сделать скрипт оболочки?

Ответы [ 4 ]

2 голосов
/ 14 июля 2010

Утилита diff установлена ​​на большинстве систем, а унифицированный вывод -u наиболее популярен.

$ diff -u file1 file2
--- file1   2010-07-14 02:08:20.000000000 -0700
+++ file2   2010-07-14 02:08:29.000000000 -0700
@@ -1,3 +1,3 @@
-Operating System : Windows XP
-Operating System : Windows NT
-Operating System : Windows 2008
+Windows XP
+Windows NT
+Windows2008

Если вы хотите использовать пословную разность, вы можете использовать менее распространенные инструменты, такие как wdiff:

$ wdiff file1 file2
[-Operating System :-]Windows XP
[-Operating System :-]
Windows NT
[-Operating System : Windows 2008-]
{+Windows2008+}

Если вы хотите более наглядное отображениеДля просмотра различий в двух файлах можно использовать такие инструменты, как xxdiff или kdiff3 или аналогичные.(Существует много графических инструментов для трехстороннего слияния.)

Если вы хотите что-то, что может быть проще использовать программно, программа cmp может перечислить все байтыразличия в файлах:

$ cmp -l file1 file2
 1 117 127
 2 160 151
 3 145 156
...

cmp может быть более полезным для файлов, которые почти идентичны.

2 голосов
/ 14 июля 2010

Давайте использовать Perl и diff, хорошо? cut не совсем делает эту работу. В соответствии с вашим первоначальным комментарием я собираюсь искать слово, которое следует за «Widnows» в каждой строке ввода, и создавать новый файл, состоящий только из этих слов. Тогда я собираюсь проверить файлы.

Каждый раз, когда я публиковал Perl, каждый раз, , у меня было множество StackOverflowers, критикующих его. Итак, приготовьтесь к плохому Perl. Это, вероятно, будет работать. Моя репутация может понизить рейтинг, и я действительно хочу помочь здесь.

Сначала скрипт Perl (назовите его preparse.pl):

my $f = shift @ARGV;
open FILE, "<$f" or die("Couldn't open file!");
while (<FILE>) {
    print "$1\n" if $_ =~ /Widnows(\s?)*?(\S+)\s*/;
}

Теперь команда, которую вы запускаете:

preparse.pl file1 > file1.tmp
preparse.pl file2 > file2.tmp
diff file1.tmp file2.tmp

Не стесняйтесь сделать этот один большой скрипт на Perl. Безотносительно.

1 голос
/ 14 июля 2010

Я бы использовал diff, diff3, если вы сравниваете 3 файла друг с другом или vimdiff.

1 голос
/ 14 июля 2010

Вопрос слишком неточный, но попробуйте это:

diff <(sed 's/Operating System : //' file1.txt) file2.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...