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