使用awk连接两个文件时,如何打印不匹配列的值?

使用awk连接两个文件时,如何打印不匹配列的值?,awk,zsh,Awk,Zsh,我有一份Nessus报告(FILE1.csv),其中包含大量数据(包括CVE/第7列),我正在将CVE列表与另一个CVE列表进行比较,我有相应的补丁(FILE2.csv)。我希望该报告有一个额外的专栏,显示哪些Nessus插件与FILE2.csv中的CVE相匹配 我使用split以分号分隔第7列,然后循环遍历其中的每个值,并将其与FILE2.csv中的值进行比较,这是当前唯一与最后一个值匹配的值,我不清楚原因 这是我目前拥有的 awk -F',' 'NR==FNR {n=split($7,x,"

我有一份Nessus报告(FILE1.csv),其中包含大量数据(包括CVE/第7列),我正在将CVE列表与另一个CVE列表进行比较,我有相应的补丁(FILE2.csv)。我希望该报告有一个额外的专栏,显示哪些Nessus插件与FILE2.csv中的CVE相匹配

我使用split以分号分隔第7列,然后循环遍历其中的每个值,并将其与FILE2.csv中的值进行比较,这是当前唯一与最后一个值匹配的值,我不清楚原因

这是我目前拥有的

awk -F',' 'NR==FNR {n=split($7,x,";"); for(i=1;i<n;i++) a[x[i]]=$0; next}; $1 in a {print a[$1] ",TRUE"}' '/C/Temp/FILE1.csv' '/C/Temp/FILE2.csv'
电流输出

121514,Google Chrome < 72.0.3626.81 Multiple Vulnerabilities,Critical,2/28/2019 6:24,2/28/2019 6:24,1/29/2019 9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782,445,10,100.111.222.3,TRUE
121514,Google Chrome < 72.0.3626.81 Multiple Vulnerabilities,Critical,2/28/2019 6:24,2/28/2019 6:24,1/29/2019 9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782,445,10,100.111.222.3,TRUE
121514,谷歌浏览器<72.0.3626.81多个漏洞,严重,2019年2月28日6:24,2/28/2019年6:24,1/29/2019年9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782445,10100.111.222.3,真实
121514,谷歌浏览器<72.0.3626.81多个漏洞,严重,2019年2月28日6:24,2/28/2019年6:24,1/29/2019年9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782445,10100.111.222.3,真实
所需输出(注意最后一列显示的布尔值是否匹配)

122111,RHEL 7:docker(RHSA-2019:0304),High,2019年3月7日8:40,4/1/2019 6:52,2/11/2019 9:00,CVE-2019-5736,0,9.3100.111.222.1,假
121514,谷歌浏览器<72.0.3626.81多个漏洞,严重,2019年2月28日6:24,2/28/2019年6:24,1/29/2019年9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782445,10100.111.222.2,真实
121514,谷歌浏览器<72.0.3626.81多个漏洞,严重,2019年2月28日6:24,2/28/2019年6:24,1/29/2019年9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782445,10100.111.222.3,真实

如果我理解正确,在
FILE1.csv
之前处理
FILE2.csv
会更容易,这样当您遇到
FILE1.csv
中的每个条目时,您就有必要的信息来打印真/假布尔值。因此,稍微修改一下脚本,它只需从
FILE2.csv

awk -F, '
NR == FNR {
    a[$1] = 1
    next
}

{
    n = split($7, x, ";")
    for (i = 1; i < n; i++)
        if (x[i] in a) {
            print $0 ",TRUE"
            next
        }
    print $0 ",FALSE"
}' FILE2.csv FILE1.csv
awk-F,'
NR==FNR{
a[$1]=1
下一个
}
{
n=拆分($7,x,“;”)
对于(i=1;i
谢谢@jenesaisquoi这正是我想要的!我遇到了一个问题,没有分隔符的CVE列在应该显示为True时将显示为FALSE。您可以添加一个检查,查看n是否为零,并在a中查找$7。在这种情况下,我发现通过将I121514,Google Chrome < 72.0.3626.81 Multiple Vulnerabilities,Critical,2/28/2019 6:24,2/28/2019 6:24,1/29/2019 9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782,445,10,100.111.222.3,TRUE 121514,Google Chrome < 72.0.3626.81 Multiple Vulnerabilities,Critical,2/28/2019 6:24,2/28/2019 6:24,1/29/2019 9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782,445,10,100.111.222.3,TRUE
122111,RHEL 7 : docker (RHSA-2019:0304),High,3/7/2019 8:40,4/1/2019 6:52,2/11/2019 9:00,CVE-2019-5736,0,9.3,100.111.222.1,FALSE
121514,Google Chrome < 72.0.3626.81 Multiple Vulnerabilities,Critical,2/28/2019 6:24,2/28/2019 6:24,1/29/2019 9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782,445,10,100.111.222.2,TRUE
121514,Google Chrome < 72.0.3626.81 Multiple Vulnerabilities,Critical,2/28/2019 6:24,2/28/2019 6:24,1/29/2019 9:00,CVE-2019-5754;CVE-2019-5755;CVE-2019-5756;CVE-2019-5757;CVE-2019-5758;CVE-2019-5759;CVE-2019-5760;CVE-2019-5761;CVE-2019-5762;CVE-2019-5763;CVE-2019-5764;CVE-2019-5765;CVE-2019-5766;CVE-2019-5767;CVE-2019-5768;CVE-2019-5769;CVE-2019-5770;CVE-2019-5771;CVE-2019-5772;CVE-2019-5773;CVE-2019-5774;CVE-2019-5775;CVE-2019-5776;CVE-2019-5777;CVE-2019-5778;CVE-2019-5779;CVE-2019-5780;CVE-2019-5781;CVE-2019-5782,445,10,100.111.222.3,TRUE
awk -F, '
NR == FNR {
    a[$1] = 1
    next
}

{
    n = split($7, x, ";")
    for (i = 1; i < n; i++)
        if (x[i] in a) {
            print $0 ",TRUE"
            next
        }
    print $0 ",FALSE"
}' FILE2.csv FILE1.csv