我想使用包含多个字段“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
所以我开始时无法打印匹配的关键字。
答案 0 :(得分:0)
awk以下将按照上述要求为您提供所需的输出。
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