grep来自具有多个字段的列表

时间:2017-03-13 17:59:11

标签: awk grep

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

源文件“source.txt”的示例:

1.1.1.1,green
1.1.1.1,red
2.2.2.2,blue

要搜索的文件示例“log.txt”

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

所需的输出列出了触发匹配后跟匹配的关键字,例如:

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

这是我的尝试:

for i in `cat source.txt`    
do       
    echo $i:       
    grep -i $i log.txt     
done

所以我开始时无法打印匹配的关键字。

1 个答案:

答案 0 :(得分:0)

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

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
相关问题