我使用awk根据字段1在两个不同的文件中找到字段2之间的差异。
我的文件如下:
file1:
2014-04-28|2667066
2014-04-29|5484549
2014-04-23|5484572
2014-04-24|2822096
file2:
2014-04-27|2667066
2014-04-28|7746836
2014-04-29|5484549
2014-04-30|2822060
对于每个日期(字段1),如果count(字段2)不匹配,我想将差异打印到单独的文件中。
我目前使用以下脚本来查找差异,但是它不显示文件1中的记录但不显示文件2中的记录:
awk -F\| 'NR==FNR{a[$1]=$2;next}a[$1]!=$NF{printf "%s, %s Cnt:%d %s Cnt:%d\n",$1,ARGV[1],a[$1],ARGV[2],$NF}' file1 file2
2014-04-27, file1 Cnt:0 file2 Cnt:2667066
2014-04-28, file1 Cnt:2667066 file2 Cnt:7746836
2014-04-30, file1 Cnt:0 file2 Cnt:2822060
必填结果:
2014-04-23, file1 Cnt:5484572 file2 Cnt:0
2014-04-24, file1 Cnt:2822096 file2 Cnt:0
2014-04-27, file1 Cnt:0 file2 Cnt:2667066
2014-04-28, file1 Cnt:2667066 file2 Cnt:7746836
2014-04-30, file1 Cnt:0 file2 Cnt:2822060
非常感谢任何帮助。
答案 0 :(得分:3)
awk -F\| '
NR==FNR { a[$1] = $2; next }
a[$1]!=$NF {
printf "%s, %s Cnt:%d %s Cnt:%d\n", $1, ARGV[1], a[$1], ARGV[2], $NF
}
{ delete a[$1] }
END {
for (i in a) {
printf "%s, %s Cnt:%d %s Cnt:%d\n", i, ARGV[1], a[i], ARGV[2], 0
}
}' file1 file2 | sort -k1
输出:
2014-04-23, file1 Cnt:5484572 file2 Cnt:0
2014-04-24, file1 Cnt:2822096 file2 Cnt:0
2014-04-27, file1 Cnt:0 file2 Cnt:2667066
2014-04-28, file1 Cnt:2667066 file2 Cnt:7746836
2014-04-30, file1 Cnt:0 file2 Cnt:2822060
它删除匹配file2
的数组元素,然后打印数组的所有剩余元素。这不保存行的顺序,因此我将其传送到sort -k1
。
答案 1 :(得分:1)
我认为您要排除awk第一个条件中某个文件中不存在的日期。删除NR == FNR并保持分配[$ 1] = $ 2;