Функция сравнения, которая сравнивает два текстовых файла в Unix
Мне было интересно, может ли кто-нибудь сказать мне, есть ли функция, доступная в unix, bash, которая сравнивает все строки файлов. Если они разные, он должен выводить true/false или -1,0,1. Я знаю, что эти функции cmp существуют на других языках. Я просматривал страницы руководства, но не увенчался успехом. Если он недоступен, может ли кто-нибудь помочь мне придумать альтернативное решение?
Спасибо
Ответы
Ответ 1
Существует несколько способов сделать это:
-
cmp -s $file1 $file2
: Посмотрите на значение $?
. Нуль, если оба файла совпадают или не равны нулю в противном случае.
-
diff $file1 $file2 > /dev/null
: Некоторые формы команды diff
могут принимать параметр, который указывает, что он ничего не выводит. Тем не менее, большинство нет. В конце концов, вы используете diff
, чтобы увидеть различия между двумя файлами. Опять же, код выхода (вы можете проверить значение $?
будет 0, если файлы совпадают и в противном случае не равно нулю.
Вы можете использовать эту команду в инструкции if:
if cmp -s "$file1" "$file2"
then
echo "The files match"
else
echo "The files are different"
fi
Команда diff
предназначена специально для текстовых файлов. Команда cmp
также должна работать со всеми двоичными файлами.
Ответ 2
Существует простая команда cmp file file
, которая делает именно это. Он возвращает 0, если они равны, и 1, если они разные, поэтому тривиально использовать в if
s:
if cmp file1 file1; then
...
fi
Надеюсь, что это поможет =)
Ответ 3
Вы можете использовать diff, который выводит разницу между двумя файлами и возвращает 1, если они разные, 0, если они являются то же самое.
$> echo toto > file1; echo tota file2; diff file1 file2
1c1
< toto
---
> tota
Ответ 4
#!/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
Ответ 5
Вы можете сделать md5 в двух файлах, а затем сравнить результаты в bash
.
Нет в этом окне для Unix, но это должно быть правильно.
#!/bin/bash
md1=$(md5 file1);
md2=$(md5 file2);
if [ $md1 -eq $ $md2 ]; then
echo The same
else
echo Different
fi
Ответ 6
echo "прочитать первый файл"
читать f1
echo "читать второй файл"
прочитайте f2
diff -s f1 f2 # печатает, если оба файла идентичны