在 unix 和 awk 中比较两个文件

在 unix 和 awk 中比较两个文件

我必须比较两个文件,file1 和 file2。每个文件有 56 列,以|.第一列是文件中的员工编号,我将检查第二个文件中是否存在相同的员工编号。如果没有,我们会将整行写入输出文件。如果文件2中存在相同的员工编号,我需要比较每列的值。如果数据不匹配,我们必须将其写入输出文件。如果每列的值匹配,那么我们需要忽略该记录。

示例文件
文件1

2620|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality and Wipro Way|||
2623|256034|131021|Mission Quality and Wipro Way|||

文件2

2620|256034|234567|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||
2623|256034|131021|Mission Quality and Wipro Way|||

示例输出:

2620|256034|131021|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||

答案1

如果文件已排序很容易完成任务diff

comm -13 File1 File2

答案2

你可以使用awk例如

awk -F'|' 'NR==FNR {a[$1]=$0;next;}; !($1 in a) || ($0 != a[$1]);' File1 File2

使用你的例子File1File2

$ awk -F'|' 'NR==FNR {a[$1]=$0;next;}; !($1 in a) || ($0 != a[$1]);' File1 File2
2620|256034|234567|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||

相关内容