2012-10-04 5 views
13

Мне было интересно, может ли кто-нибудь сказать мне, есть ли функция, доступная в unix, bash, которая сравнивает все строки файлов. Если они разные, он должен выводить true/false или -1,0,1. Я знаю, что эти функции cmp существуют на других языках. Я просматривал страницы руководства, но не увенчался успехом. Если он недоступен, может ли кто-нибудь помочь мне придумать альтернативное решение?Функция сравнения, которая сравнивает два текстовых файла в Unix

Благодаря

+0

'дифф -u file1 file2' Примечание: Выход DIFF может (и будет) использоваться 'patch' для« редактирования »файла1 в файл2 (или наоборот) – wildplasser

ответ

1

Вы можете использовать diff, который выводит разницу между двумя файлами и возвращают 1, если они различны, 0, если они одинаковы.

$> echo toto > file1; echo tota file2; diff file1 file2 
1c1 
< toto 
--- 
> tota 
+0

вы можете объяснить это немного лучше? Тото и Тота ...? – Masterminder

+0

строк, которые выводятся в файл. Затем я сравниваю каждый файл, file1 содержащий toto, file2, содержащий tota. – tomahh

+0

, а затем < toto --- > tota? thx btw – Masterminder

0

Вы могли бы сделать md5 на два файла, а затем сравнить результаты в bash.

Нет в этом окне для Unix, но это должно быть правильно.

#!/bin/bash 

md1=$(md5 file1); 
md2=$(md5 file2); 

if [ $md1 -eq $ $md2 ]; then 
    echo The same 
else 
    echo Different 
fi 
3

Существует простая команда cmp file file, которая делает именно это. Возвращает 0, если они равны, и 1, если они различны, так что это тривиально использовать в if с:

if cmp file1 file1; then 
    ... 
fi 

Надежда это помогает =)

+1

просто избил меня. :-) Добавление опции '-s' гарантирует, что она не работает для разных файлов и предоставляет код возврата, поэтому вы не получите дополнительный вывод – TaninDirect

31

Есть несколько способов сделать это:

  • cmp -s $file1 $file2: Посмотрите на значение $?. Нуль, если оба файла совпадают или не равны нулю в противном случае.
  • diff $file1 $file2 > /dev/null: Некоторые формы команды diff могут принимать параметр, который указывает, что он ничего не выводит. Тем не менее, большинство нет. В конце концов, вы используете diff, чтобы увидеть различия между двумя файлами. Опять же, код выхода (вы можете проверить значение $? будет 0, если файлы совпадают и отличны от нуля в противном случае

Вы можете использовать эти команды в оболочке, если оператор:.

if cmp -s "$file1" "$file2" 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

команда diff сделана специально для текстовых файлов. команда cmp должна работать со всеми двоичными файлами тоже.

1
#!/bin/bash 

file1=old.txt 
file2=new.txt 

echo " TEST 1 : " 
echo 

if [ $(cmp -s ${file1} ${file2}) ] 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

echo 
echo " TEST 2 : " 
echo 
bool=$(cmp -s "$file1" "$file2") 
if cmp -s "$file1" "$file2" 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 

echo 
echo " TEST 3 : " 
echo 

md1=$(md5 ${file1}); 
md2=$(md5 ${file2}); 

mdd1=$(echo $md1 | awk '{print $4}') 
mdd2=$(echo $md2 | awk '{print $4}') 
echo $md1 
echo $mdd1 
echo $md2 
echo $mdd2 
echo 

if [ $mdd1 = $mdd2 ]; 
then 
    echo "The files match" 
else 
    echo "The files are different" 
fi 
0

эхо «прочитать первый файл» чтения f1 эхо "прочитать второй файл" чтения f2

дифф -s f1 f2 # принты, если оба файла идентичны