shell脚本:实现两文件对比并输出差异内容到不同文件

实际需求:

工作中接到任务需要手动对比数据库表和python代码中的差异项,并将两者独有内容和相同内容分别记录到不同的文件中,交了任务之后突想用shell实现,便作了一次尝试。

实现思路:

首先要让原始文件中的重复行只出现一次并将结果保存到两个新文件(uniq1和uniq2)中。
再逐行读取两个新文件内容并使用for循环嵌套,遍历进行字段比较,将两个新文件相同内容输出到thesame文件,再在两个新文件中使用sed命令将换行的空格替换成 |,进一步反向过滤掉thesame文件内容就分别得到了两文件的独有内容。由于thesame文件使用了追加的方式,如果第二次执行脚本就会将新的内容追加到第一次执行内容之后,而不能单独得出第二次比对的结果,所以在开头设定如果之前有脚本运行产生的thesame文件存在,那么就删掉该文件重新建立新的文件,这样第二次文本对比的结果就不会受第一次的影响。

shell脚本内容:

#!/bin/bash
[  -e "thesame" ]&&{
        rm -f thesame
        }
[ "$#" != "2" ]&& {
        echo "input error"
        exit 0
        }
sort -u $1 > uniq1
sort -u $2 > uniq2
for Text1 in `cat  uniq1`
do
        for Text2 in `cat uniq2`
        do
                if [ "$Text1" =  "$Text2" ]
                then
                echo $Text1 >> thesame
                fi
        done
done
Except=`sed 's/ /|/g' thesame`
grep -vE "$Except" uniq1 > onlyinfile1
grep -vE "$Except" uniq2 > onlyinfile2

脚本运行结果:

原始文件内容:

[root@localhost jiaoben]# cat file1
aaa   bbb
ccc
ddd
ggg
ccc
aaa
ggg
kkkolllo
6474
466
[root@localhost jiaoben]# cat file2
ccc
ccc
ggg
fff
ddd
kkk
fff
646
ggg
3749
e8uc
[root@localhost jiaoben]# 

脚本运行结果:保存共有内容的thesame文件:

[root@localhost jiaoben]# sh bidui.sh file1 file2
[root@localhost jiaoben]# cat thesame 
ccc
ggg
ddd
[root@localhost jiaoben]# 

保存第一个文件独有内容的onlyinleft文件:

[root@localhost jiaoben]# cat onlyinleft 
466
6474
aaa
aaa   bbb
kkkolllo
[root@localhost jiaoben]# 

保存第二个文件独有内容的onlyinright文件:

[root@localhost jiaoben]# cat onlyinright
fff
3749
646
e8uc
kkk
[root@localhost jiaoben]# 

你可能感兴趣的:(shell,原创)