Bash比较文件中的随机行并输出消息
我是个脚本新手,我需要帮助 我有两份档案。 在第一个示例中,我有一系列的ip和数据库连接数,在另一个示例中,我分析了数据源的配置,其中打印了数据库的名称、最大和最小连接数、主机名和数据库服务器的ip 我需要的是比较这两个文件并打印一条消息 文件1 第一列是ip,第二列是与数据库同时连接的数量 文件2Bash比较文件中的随机行并输出消息,bash,file,compare,Bash,File,Compare,我是个脚本新手,我需要帮助 我有两份档案。 在第一个示例中,我有一系列的ip和数据库连接数,在另一个示例中,我分析了数据源的配置,其中打印了数据库的名称、最大和最小连接数、主机名和数据库服务器的ip 我需要的是比较这两个文件并打印一条消息 文件1 第一列是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 serve
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不匹配,则打印另一条消息
这是可能的,有人可以帮我一把,或者至少告诉我解决方法吗
提前谢谢 您可以使用:
$ 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\u connections
数组将值存储在第一个文件中。然后它循环通过第二个文件,将IP替换为对应于该特定服务器的号码。对不起,你能给我介绍一下学习awk的最佳来源吗,但是,如果第一个文件中没有3行或4行,而是有10行或12行,那么这是否有效?@MortezaLSC我发现这是一个非常好的读物。@Marcospoosada是的,它应该可以处理更多的行。如果没有,请更新您的问题,以便我可以改进答案。基本上,逻辑是明确的:在第一个字段中获取col2,然后在第二个字段的col5中使用它。您可能还需要检查这一点
$ 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