Bash比较文件中的随机行并输出消息

时间:2014-02-20 16:55:54

标签: bash file compare

我是脚本编写的新手,我需要亲自动手

我有两个文件。 在第一个我有一系列的ip和数量的数据库连接,在另一个我解析了数据源的配置,打印数据库的名称,最大和最小连接,主机名和IP的数据库服务器

我需要比较这两个文件并打印一条消息

File1中

1.2.3.4 1
1.2.3.5 6
1.2.3.6 1
1.2.3.7 1
1.2.3.8 7

第一列是ip,第二列是与数据库同时连接的数量

文件2

DB1 50 5      server1.domain.com 1.2.3.5
DB2 50 5    server2.domain.com 1.2.3.8
DB3 15 5      server3.domain.com 1.2.3.9
DB4 10 1    server4.domain.com 1.2.3.4
DB5 10 1       server5.domain.com 1.2.3.6

第一列是数据库的名称,第二列是最大连接数,第三列是最小连接数,第四列是服务器的主机名,第五列是ip

因此,目标是将第一个文件的ip与第二个文件的任何条目匹配,当它们匹配时,如果数据库的连接数在最大值和最小值之间进行比较,则打印消息他们还可以,或者他们不好。 此外,如果有任何文件中的ip不匹配,则打印另一条消息

这可能,有人可以帮我解决这个问题,或者至少指出我的解决方案吗?!

提前致谢!!

1 个答案:

答案 0 :(得分:1)

您可以使用:

$ awk 'NR==FNR {a[$1]=$2; next} $5=a[$5]' file1 file2
DB1 50 5 server1.domain.com 6
DB2 50 5 server2.domain.com 7
DB4 10 1 server4.domain.com 1
DB5 10 1 server5.domain.com 1

它将值存储在第一个文件中,其数组为a[ip]=num_connections。然后它循环遍历第二个文件,用对应于该特定服务器的编号替换IP。