文件1(file1.txt)
// file1.txt
073C1E63-40A9-43B9-B280-2ED9BE8667D0
05773402-F687-4C05-A0B1-2128F66E2597
06A56E31-92D1-440C-9BED-43919195C8BE
0A8FBC05-FDB5-489D-8B59-A5AADE4B0203
文件2 (file2.txt)
//file2.txt
06A56E31-92D1-440C-9BED-43919195C8BE
05773402-F687-4C05-A0B1-2128F66E2597
073C1E63-40A9-43B9-B280-2ED9BE8667D0
0746E02F-AB9E-40FB-960C-02A4B743D811
现在需要统计在文件1中出现,但是在文件2中没有出现的行
1 先处文件1和文件2,使其按字符集排序和去重
cat file1.txt | sort | uniq > file_1.txt cat file2.txt | sort | uniq > file_2.txt
3 查看文件差异
diff file_1.txt file_2.txt
//输出
0a1
>
4c5
< 0A8FBC05-FDB5-489D-8B59-A5AADE4B0203
---
> 0746E02F-AB9E-40FB-960C-02A4B743D811
// 输出的含义(它输出一组指令,用于如何更改第一个文件使其与第二个文件相同。)
//0a1 flle_1.txt的第0行需要增加一行才能和file_2.txt的第一行保持一致,增加的一行为 (空行)
//4c5 file_1.txt的第4行需要修改才能和file_2.txt的第五行保持一致,把file_1.txt的第四行(0A8FBC05-FDB5-489D-8B59-A5AADE4B0203)删掉,增加file_2.txt的第五行(0746E02F-AB9E-40FB-960C-02A4B743D811)
//*0a1
//*0 第一个文件的对应行号,
//*a 一个字母(a:添加, c:改变 ,d:删除)
//*1 对应的第2个文件的行号。
//* < 0A8FBC05-FDB5-489D-8B59-A5AADE4B0203
//* ---
//* > 0746E02F-AB9E-40FB-960C-02A4B743D811
//* < 开头的行表示来自第一个文件
//* > 开头的行表示来自第二个文件
//* 三个横杠"---" 仅仅表示分隔开文件1和文件2的这些行。
3 统计文件1中,文件2中没有的行
diff file_1.txt file_2.txt | awk '$1 == "<" {print $2}'
//输出
0A8FBC05-FDB5-489D-8B59-A5AADE4B0203
4 附录diff输出的含义