一般工作中会遇到比较两个文本文件的不同,类似于第二天新增数据、或者修改数据统计。我查阅资料查到一下两种方法。
说明 $1 $2 为要比较的两个文本文件 此处使用参数代替
1 grep -F -v -f $1 $2 |sort |uniq
-f<范本文件>或--file=<范本文件> 指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。
-F或--fixed-regexp 将范本样式视为固定字符串的列表。
-v或--revert-match 反转查找。
使用此命令可以实现上述功能,文件大小或者数量不大时,没有问题,但是当文件过大,就像我线上处理的几G的文件就将32G的内存吃的满满的,所以使用该脚本时注意内存监控。
2 cat $1 $2 | sort | uniq -d >temp.txt
cat $2 temp.txt | sort | uniq -u > $3
该脚本思路是先求出两个文本的交集,然后用一个文件去除掉交集部分,剩下的部分也就是两个文本差异化的部分。
我同样在线上处理几G的文本,并进行内存监控,并未发现严重吃内存的现象,并且速度较比第一种也快了很多,因此建议使用该脚本来操作 。