Подтвердить что ты не робот

Функция сравнения, которая сравнивает два текстовых файла в Unix

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

Спасибо

4b9b3361

Ответ 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 # печатает, если оба файла идентичны