diff和awk分析数据

文件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输出的含义

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注