Awk 从具有多个字段的列表中删除grep

Awk 从具有多个字段的列表中删除grep,awk,grep,Awk,Grep,我想使用带有多个字段“source.txt”的源文件搜索文件“log.txt” 源文件“source.txt”示例: 1.1.1.1,绿色 1.1.1.1,红色 2.2.2.2,蓝色 要搜索的文件示例“log.txt” 1.1.1.1,bla bla Yellow,30000,bla bla bla 1.1.1.1,bla-bla,30000,bla-bla-green 1.1.1.1,布拉红布拉,30000,布拉 2.2.2.2,布拉布拉,30001,布拉红 2.2.2.2,蓝色布拉布拉,3

我想使用带有多个字段“source.txt”的源文件搜索文件“log.txt”

源文件“source.txt”示例:

1.1.1.1,绿色
1.1.1.1,红色
2.2.2.2,蓝色
要搜索的文件示例“log.txt”

1.1.1.1,bla bla Yellow,30000,bla bla bla
1.1.1.1,bla-bla,30000,bla-bla-green
1.1.1.1,布拉红布拉,30000,布拉
2.2.2.2,布拉布拉,30001,布拉红
2.2.2.2,蓝色布拉布拉,30003,布拉布拉布拉
所需输出列出触发匹配的关键字,后跟匹配,例如:

1.1.1.1,绿色:1.1.1.1,bla-bla,30000,bla-bla-green
1.1.1.1,红色:1.1.1.1,布拉红布拉,30000,布拉
2.2.2.2,蓝色:2.2.2.2,蓝色布拉布拉,30003,布拉布拉布拉
以下是我的尝试:

'cat source.txt'中的i的

做
回音$i:
grep-i$i log.txt
完成
因此,我无法在开始时打印匹配的关键字。

下面将按照上面的要求为您提供所需的输出

awk -F, '
         FNR==NR{
                  a[$1]=$1 in a ? a[$1]","$2:$2;
                  next
                }
         $1 in a{
                  split(a[$1],c); 
                  for(i=1; i in c; i++)
                  { 
                      if(match(tolower($0),c[i]))
                      { 
                         print $1 FS c[i] ":" $0; 
                         next
                      }  
                   }
                }
        ' source log 
输入

$ cat source 
1.1.1.1,green
1.1.1.1,red
2.2.2.2,blue

$ cat log 
1.1.1.1,bla bla Yellow,30000,bla bla
1.1.1.1,bla bla,30000,bla bla green
1.1.1.1,bla red bla,30000,bla bla
2.2.2.2,bla bla,30001,bla red
2.2.2.2,Blue bla bla,30003,bla bla
$ awk -F, '
         FNR==NR{
                  a[$1]=$1 in a ? a[$1]","$2:$2;
                  next
                }
         $1 in a{
                  split(a[$1],c); 
                  for(i=1; i in c; i++)
                  { 
                      if(match(tolower($0),c[i]))
                      { 
                         print $1 FS c[i] ":" $0; 
                         next
                      }  
                   }
                }
        ' source log 
1.1.1.1,green:1.1.1.1,bla bla,30000,bla bla green
1.1.1.1,red:1.1.1.1,bla red bla,30000,bla bla
2.2.2.2,blue:2.2.2.2,Blue bla bla,30003,bla bla
输出

$ cat source 
1.1.1.1,green
1.1.1.1,red
2.2.2.2,blue

$ cat log 
1.1.1.1,bla bla Yellow,30000,bla bla
1.1.1.1,bla bla,30000,bla bla green
1.1.1.1,bla red bla,30000,bla bla
2.2.2.2,bla bla,30001,bla red
2.2.2.2,Blue bla bla,30003,bla bla
$ awk -F, '
         FNR==NR{
                  a[$1]=$1 in a ? a[$1]","$2:$2;
                  next
                }
         $1 in a{
                  split(a[$1],c); 
                  for(i=1; i in c; i++)
                  { 
                      if(match(tolower($0),c[i]))
                      { 
                         print $1 FS c[i] ":" $0; 
                         next
                      }  
                   }
                }
        ' source log 
1.1.1.1,green:1.1.1.1,bla bla,30000,bla bla green
1.1.1.1,red:1.1.1.1,bla red bla,30000,bla bla
2.2.2.2,blue:2.2.2.2,Blue bla bla,30003,bla bla

你尝试过什么吗?您可以使用
join
命令执行此操作
man join
是你的朋友。
我不想因为我的grep尝试而把事情搞得一团糟
。看起来你认为我们是免费的编码服务。。。