awk查找两个文件中第二个字段之间的差异

用户名

我正在使用awk在基于字段1的两个不同文件中查找字段2之间的差异。

我的档案如下:

文件1:

2014-04-28|2667066
2014-04-29|5484549
2014-04-23|5484572
2014-04-24|2822096

文件2:

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

任何帮助是极大的赞赏。

a5hk
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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

找到第二个字段的差异,使用第一个字段报告(awk)

使用awk打印第二个字段

比较两个文件的第二个字节时出现分段错误

按两个字段排序,但第二个取决于PHP中的条件

与第二个字段相关时在一个字段中查找完全匹配

按两个字段排序,第二个字段为反向字母一线

比较两个文件并从第二个文件中获取匹配的行

从git log输出中替换文件中的第二个字段

比较两个数组并查找第二个数组中缺少的项目

AWK比较两个文件,如果匹配,则将第二个文件中的新列添加到第一个文件中

如何计算文件中第二个字段的平均值?

尝试对两个字段进行排序,然后是第二个,然后是第一个

在两个csv文件中匹配一个字符串,但是第二个文件太大,无法读入列表

在bash Linux中计算文本行第二个字段中数字之间的差异,如果大于2则显示警告

shell awk 输入文件中的两个值从第二个值中减去第一个值

将第二行的第二个字段附加到文件中的第一行

比较两个图像并突出显示第二个图像上的差异

删除与Shell脚本中第二个文件中的前2个字段匹配的文件中的行

仅当也存在于第二个文本文件中时,才根据第一个文本文件中的第二个字段组合两个文本文件

尝试首先在两个字段上进行排序是第二个条件

比较两个文件,每个文件中的第三列都匹配,但是第二个fith列使用awk不匹配

Android:比较两个对象的ArrayList并从第二个ArrayList中查找不匹配的ID

无法使用AWS SSM命令中传递的awk过滤器打印第二个字段

用sed或awk替换第二个字段输出

计数时间日期发生在第二个表中的两个日期之间

如果第二个表中两个日期之间的日期返回值

TSQL - 根据第二个表中两个整数之间的值进行更新。

检查数组是否包含日期,即在第二个数组中的两个日期之间

合并两个XML文件时,从第二个XML文件中删除通用XML标签