Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Awk_Sed - Fatal编程技术网

bash脚本:检查多个文件的值并返回哪些文件包含该值的最佳方法?

bash脚本:检查多个文件的值并返回哪些文件包含该值的最佳方法?,bash,awk,sed,Bash,Awk,Sed,我不是bash专家,所以现在我有一个300行的脚本,试图完成一些我觉得可以通过一个更简单的方法完成的事情,我只是不知道 该脚本基本上检查来自不同来源的多个日志,以确定哪些主机(按IP地址)安装了某些服务。我将这些IP地址压缩为与每个已安装服务关联的多个文件 如何获取这些文件,比较其中的IP,并输出每个IP所在的文件?现在我有大量的嵌入式while循环,这些循环变得非常复杂,随着我尝试添加更多服务,它们开始难以更新。最终,我计划将此输出放在一个矩阵中,在该矩阵中,所有文件中都找到了每个唯一的IP,

我不是bash专家,所以现在我有一个300行的脚本,试图完成一些我觉得可以通过一个更简单的方法完成的事情,我只是不知道

该脚本基本上检查来自不同来源的多个日志,以确定哪些主机(按IP地址)安装了某些服务。我将这些IP地址压缩为与每个已安装服务关联的多个文件

如何获取这些文件,比较其中的IP,并输出每个IP所在的文件?现在我有大量的嵌入式while循环,这些循环变得非常复杂,随着我尝试添加更多服务,它们开始难以更新。最终,我计划将此输出放在一个矩阵中,在该矩阵中,所有文件中都找到了每个唯一的IP,然后在每个IP上安装了一个“x”和每个相关服务

我没有IP的主列表,所以我没有一个简单的比较起点:\这使得循环更加困难


谢谢大家。

你们会想要这样的awk脚本(使用GNU awk实现真正的多维数组):


但是,在您编辑您的问题以提供一些示例输入和预期输出之前,这只是一个最佳猜测。

您是否尝试过使用grep?您是否想要一个工具,它接受IP并为您提供包含该IP的文件列表,或者使用一个文件名并给出该文件中IP列表的工具?编辑您的问题以包含一些示例输入和预期输出。您可以使用Perl或Python吗?
$ cat tst.awk
{ hits[$0][ARGIND]++ }
END {
    OFS = "\t"
    printf "%s%s", "IP", OFS
    for (fileNr=1; fileNr<=ARGIND; fileNr++) {
        printf "%s%s", ARGV[fileNr], (fileNr<ARGIND?OFS:ORS)
    }
    for (ip in hits) {
        printf "%s:%s", ip, OFS
        for (fileNr=1; fileNr<=ARGIND; fileNr++) {
            printf "%s%s", (hits[ip][fileNr]?"X":""), (fileNr<ARGIND?OFS:ORS)
        }
    }
}
$ cat file1
a
b
c
$ 
$ cat file2
a
d
$ 
$ cat file3
a
b
d
e
$                            
$ gawk -f tst.awk file1 file2 file3
IP      file1   file2   file3
a:      X       X       X
b:      X               X
c:      X
d:              X       X
e:                      X