2017-04-10 104 views
0

我试图使用以下awk使用部分匹配,以匹配在file1到行线中file2线。如果字符串部分与另一个匹配,则为该行打印自定义输出(.... missing but ... found)。AWK以匹配使用部分匹配和打印消息

目前,名称将被搜索显示丢失,因为它不是完全匹配。谢谢 :)。

file1的

ID 
NAME 
MRE11 

file2的

NAME 
ID 
MRE11A 

期望的输出

2 ids found 
MRE11 missing but MRE11A found 

AWK

BEGIN { FS="[[:space:]]+|-" } 
NR == FNR { seen[$1]; next } 
$1 in seen { found[$1]; delete seen[$1] } 
END { print length(found) " ids found" 
    for (i in seen) print i " missing" } 

可能:

else print (i in seen) "missing" but i found } 

回答

1

这样的事情?

$ awk 'NR==FNR {a[$1]; next} 
       {if($1 in a) c++; 
       else for(k in a) 
         if(k~$1) {print $1,"missing but found",k; break}} 
     END  {print c,"ids matched"}' file2 file1 

MRE11 missing but found MRE11A 
2 ids matched 

要更改顺序,您需要将匹配的顺序保存在数组中并在END块中打印。但是,这似乎更容易。

+0

非常感谢你:)。 – Chris