将第一个文件的内容与第二个文件的内容进行匹配以生成第三个文件

将第一个文件的内容与第二个文件的内容进行匹配以生成第三个文件

我的第一个文件的示例数据first.txt如下:

10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.3,Web Server,comments4,httpd is latest version,myappcode15
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15
10.0.0.2,Web Server,comments3,websphere is new version,myappcode11
.....

样本数据second.txt

whatever,10.0.0.1,Web Server,date,whatever,here is JBOSS on the server,myappcode1
watever1,whatever2,10.0.0.3,here is App server,comments4,myapp17,myappcode15
whatever,10.0.0.7,check for test_WebLogic_version version,comments5,date,myappcode2
whatever,whatever,10.0.0.13,App Server,here is JBOSS,myapp17,myappcode15
whatever,whatever,whatever,10.0.0.12,Web Server,here on_windows is the latest version,whatever,
.....

要求:

我需要检查column1和第四列的第一个单词是否first.txt存在于任何行中second.txt

因此,third.txt应该是

10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15
.....

Third.txt 不应包含以下两个条目,因为:

10.0.0.13,App Server,comments4,jboss is old version,myappcode15  ---->  `httpd` did not match `here is App server`
10.0.0.2,Web Server,comments3,websphere is new version,myappcode11  ---->  `10.0.0.2` did not match `10.0.0.12`

以下是我所知道的,但无法以巧妙的方式将其组合在一起。

  1. 获取first.txt中的第一列和第四列的第一个单词

    cat first.txt | cut -d, -f1 ---> 为我们提供第一栏

    cat first.txt | cut -d, -f4 | awk 'NR==1{print $1}' ---> 获取第四列的第一个单词

  2. Grep 查找 Second.txt 中的第 1 列和第四列的第一个单词

    cat second.txt | grep -w <first column> | grep -i 'first word of fourth column' ---> 这里需要帮助

你能建议一下吗?

答案1

这是一个 awk 脚本:

awk -F, 'FNR==NR {
            row[tolower($0)]
            next
        }
        {
            split($4,arr," ")
            for (r in row) {
                if (r ~ tolower($1 FS) && r ~ tolower(arr[1])) {
                    print
                    next
                }
            }
        }' second.txt first.txt

输出:

10.0.0.1,Web Server,comments1,jboss is older version,myappcode1
10.0.0.7,Web Server,comments5,weblogic is old version,myappcode2
10.0.0.13,App Server,comments4,jboss is old version,myappcode15

我们将作为键的行存储second.txt在“行”关联数组中,然后我们将行解析first.txt并测试所选字段到“行”中。tolower()用于实现忽略大小写匹配。

笔记:我对上面的内容进行了修改,第一个匹配模式不再是单独的 IP,现在是$1 FS,意思是 IP 后跟一个逗号。因为两个文件都是这种情况。如果没有它,10.0.0.1还会匹配 for10.0.0.13或类似的。

相关内容