使用shell脚本对比两个文件内容差异
平时工作期间,我们有可能遇到对比两个文件内容的差异性,并将两个文件差异的内容输出,这个时候我们可以使用shell脚本来操作,使用shell脚本的sort排序后再比对,这种方法在数据量大的情况下,比循环比对速度快很多。
以下的比对的代码:
并集:cat file1.txt file2.txt | sort | uniq > file.txt
交集: cat file1.txt file2.txt | sort | uniq -d >file.txt
差集:求file1.txt相对于file2.txt的差集,可先求出两者的交集temp.txt,然后在
file1.txt中除去temp.txt即可。
cat file1.txt file2.txt | sort | uniq -d >temp.txt
cat file1.txt temp.txt | sort | uniq -u >file.txt
https://blog.csdn.net/weixin_33722405/article/details/88721614
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]#
https://blog.csdn.net/letter_A/article/details/96453205