2014-02-19 5 views
2

У меня есть два файла с именем file1 и file2.Сравнение файлов с использованием сценария оболочки

Содержание file1 ---> Здравствуйте/Good/Morning World/Индия

Содержание file2 ---> Здравствуйте/Good/Morning World/China

мне нужно проверить если содержимое этих файлов равны или not.Since как файлы имеют «Hello/Good/Morning» в общем он должен напечатать «EQUAL», как на моих requirement.I написал код для этого:

file1=/app/webmcore1/Demo/FORLOOP/Kasturi/xyz/pqr.txt 
file2=/app/webmcore1/Demo/FORLOOP/Prashast/xyz/pqr.txt 
IFS=` ` 

for i in cat $file1 
do 
    if [ "$i" != '' ]; then 
     echo "$i" 

     for j in cat $file2 
     do 
      if [ "$j" != '' ]; then 
       echo "$j" 

       if [[ $i -eq $j ]]; then 
        echo "EQUAL" 
       fi 
      fi 
     done 
    fi 
done 

Но он не отображает вывод правильно.

+0

'Я написал код для this' Пожалуйста, поделитесь код, если не классифицировано. – anubhava

+0

file1 =/app/webmcore1/Demo/FORLOOP/Kasturi/xyz/pqr.txt file2 =/app/webmcore1/Демо/FORLOOP/Prashast/xyz/pqr.txt IFS = '' для i в 'cat $ file1' do если ["$ i"! = '']; затем echo «$ i» для j в 'cat $ file2' do if [" $ j "! = ''], затем echo« $ j », если [[$ i -eq $ j]]; затем эхо «EQUAL» fi fi done fi done – user3329128

+1

Не помещайте код в комментарии, ставьте его в вопрос, редактируя вопрос. – anubhava

ответ

0

diff сравнивает файлы по строкам. Если diff filename выводит что-нибудь, файлы разные.

Если выход diff пуст, они такие же.

0

У нас уже есть инструмент для сравнения файлов, он называется diff (и на самом деле гораздо более мощный, чем просто решение равным или нет, но может быть использовано для этого).

diff -q file1 file2 >/dev/null && echo "EQUAL" 

Если вы хотите, чтобы напечатать что-то вернуть в случае, если файлы не равны:

diff -q file1 file2 >/dev/null && echo "EQUAL" || echo "NOT EQUAL" 
0

Таким образом, файлы «равны», если у них есть какие-либо одно слово в общем?

result=$(
    comm -12 <(tr '[:space:]' '\n' <file1 | sort) <(tr '[:space:]' '\n' <file2 | sort) 
) 
[[ -n $result ]] && echo EQUAL 

Или просто в Баш

words=($(< file1)) 

for word in $(< file2); do 
    if [[ " ${words[*]} " == *" $word "* ]]; then 
     echo "EQUAL due to $word" 
     break 
    fi 
done 
EQUAL due to Hello/Good/Morning 
Смежные вопросы