awk使用部分匹配和打印消息匹配行

awk使用部分匹配和打印消息匹配行,awk,Awk,我试图使用下面的awk将file1中的行与file2中的行进行部分匹配。如果字符串与另一个字符串部分匹配,则会为该行打印自定义输出(…缺失,但…找到) 当前,由于名称不完全匹配,因此无法搜索缺少的显示。谢谢:) file1 ID NAME MRE11 文件2 NAME ID MRE11A 所需输出 2 ids found MRE11 missing but MRE11A found awk BEGIN { FS="[[:space:]]+|-" } NR == FNR { seen[$1]

我试图使用下面的
awk
file1
中的行与
file2
中的行进行部分匹配。如果字符串与另一个字符串部分匹配,则会为该行打印自定义输出(
…缺失,但…找到

当前,由于名称不完全匹配,因此无法搜索缺少的显示。谢谢:)

file1

ID
NAME
MRE11
文件2

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 }
像这样的

$ 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
要更改顺序,您需要将匹配的项保留在一个数组中,并在结束块处打印。然而,这似乎更容易