使用shell脚本进行文件比较

时间:2014-02-19 17:08:48

标签: shell

我有两个名为file1和file2的文件。

file1的内容---> 你好,早上好 世界/印度

file2的内容---> 你好,早上好 世界/中国

我需要检查这些文件的内容是否相同。因为两个文件都有“Hello / Good / Morning”的共同点,所以应按照我的要求打印“EQUAL”。我已为此编写了代码:

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 

但它没有正确显示输出。

3 个答案:

答案 0 :(得分:0)

diff逐行比较文件。如果diff filename输出任何内容,则文件不同。

如果diff的输出为空,则它们是相同的。

答案 1 :(得分:0)

已经有一个比较文件的工具,它叫做diff(实际上比决定是否相等更强大,但可以用于此)。

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

如果您还想要在文件不相同的情况下打印返回内容:

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

答案 2 :(得分:0)

那么,如果文件有任何共同的单词,那么这些文件是“相等的”吗?

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

或者,就在bash中

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