Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash比较文件中的随机行并输出消息_Bash_File_Compare - Fatal编程技术网

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

Bash比较文件中的随机行并输出消息,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

我是个脚本新手,我需要帮助

我有两份档案。 在第一个示例中,我有一系列的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      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