shell比较两个“字符串-数字”文件

问题简化后描述如下:
已知两个文件file1.txt和file2.txt内容如下:

file1.txt
database1:table1    5
database1:table2    10
database1:table3    100
database2:table3    45

file2.txt
database1:table1    19
database1:table2    24
database1:table3    100
database2:table3    20

然后我的问题是,对比两个文件中第一列字符串相同的数据,比较对应的第二列数值是否都不为0,或者一个为0,或者都为0。
上面的例子是最简单的情况,这种情况下file1.txt和file2.txt中每一行内容都是对应的,只是数值可能不同。
复杂的情况有file1.txt和file2.txt中第一列不完全相同,存在某些字符串在file1.txt中而不在file2.txt中,也存在某些字符串在file2.txt而不在file1.txt中。


需要解决的问题描述如下:
对数据库某些核心表进行监控,监控表内数据行数的状态:非空->空。

需要监控的表记录在一个配置文件内,crontab每隔一段时间去读取配置文件,得到需要监控的表,然后获取表中的数据行数。每次获取了具体的每个表的数据行数后,跟上一次的数据进行比较,当发现数据出现“非空->空”状态的变换,则NOC告警。

这里面的问题是:crontab不同时间读取的配置文件可能不同(存在两个时间间隔之间,有人修改配置文件的情况)。

阅读 5k
2 个回答

假设你第一个域里不含空白字符:

join file1.txt file2.txt | awk '{if($2 != 0 && $3 == 0){print}}'

用python,perl等语言吧,将两个file的第一列和第二列存成dict(hash)类型,然后就可以进行对比了

推荐问题
logo
101 新手上路
子站问答
访问
宣传栏