在下面的awk
中,我尝试匹配$2
和f1
中的每一行f2
,然后匹配$1
和{中的f1
{1}},如果两个都匹配,则f2
为“ MATCH”,否则$3
为“ MISMATCH”。除非我删除了$3
之一,否则下面的awk
不会执行。谢谢:)。
f1
if
f2
1234 aaa
5678 xxxx
1244 yyyy
2255 zzzz
所需
5678 xxxx
224 zzzz
1244 yyyy
1234 aaa
awk
1234 aaa MATCH
5678 xxxx MATCH
1244 yyyy MATCH
2255 zzzz MISMATCH
答案 0 :(得分:2)
AWK不能同时读取输入文件。
首先,您需要将f2
读入数组,然后可以在处理$3
时使用该数组确定f1
中的内容。
awk 'NR==FNR{a[$1]=$2;next} {$3=(($1 in a&&a[$1]==$2)?"":"MIS")"MATCH"} 1' f2 f1
答案 1 :(得分:2)
请您尝试以下操作(这将打印出文件1中的值,而不是文件2中用于NON-MATCH关键字打印的值)。
awk '
FNR==NR{
a[$1]=$0
next
}
{
print $0,$1 in a?"MATCH":"NON-MATCH"
}' Input_file2 Input_file1
其他解决方案: :如果要为两个文件打印不匹配的行(因为上面的代码仅打印file1中的文件,而不打印file2中的文件)。 / p>
awk '
FNR==NR{
a[$1]=$2
next
}
{
print $0,$1 in a?"MATCH":"NON-MATCH-FILE1"
b[$1 in a?$1:""]
}
END{
for(i in a){
if(!(i in b)){
print a[i]" NON-MATCH-FILE2"
}
}
}' Input_file2 Input_file1