Bash 使用awk匹配两个不同文件中的数字
我有两个文件(f1和f2),都由三列组成,长度不同。我想通过以下方式创建一个包含四列的新文件:Bash 使用awk匹配两个不同文件中的数字,bash,awk,Bash,Awk,我有两个文件(f1和f2),都由三列组成,长度不同。我想通过以下方式创建一个包含四列的新文件: f1 f2 1 2 0.2 1 4 0.3 1 3 0.5 1 5 0.2 1 4 0.2 2 3 0.6 2 2 0.5 2 3 0.9 如果前两列中的数字出现在两个文件中,则我们打印每个文件的前两个数字和第三个数字(例如,在两个文件中都有14,在f3中应该有14 0.2 0.3;否则,如果f2中缺少前两个数字,只需
f1 f2
1 2 0.2 1 4 0.3
1 3 0.5 1 5 0.2
1 4 0.2 2 3 0.6
2 2 0.5
2 3 0.9
如果前两列中的数字出现在两个文件中,则我们打印每个文件的前两个数字和第三个数字(例如,在两个文件中都有14
,在f3中应该有14 0.2 0.3
;否则,如果f2中缺少前两个数字,只需在第四列中打印一个零即可
这些示例的完整结果应该是
f3
1 2 0.2 0
1 3 0.5 0
1 4 0.2 0.3
2 2 0.5 0
2 3 0.9 0.6
我写的脚本如下:
awk '{str1=$1; str2=$2; str3=$3;
getline < "f2";
if($1==str1 && $2==str2)
print str1,str2,str3,$3 > "f3";
else
print str1,str2,str3,0 > "f3";
}' f1
此awk应在以下情况下工作:
awk 'FNR==NR{a[$1,$2]=$3;next} {print $0, (a[$1,$2])? a[$1,$2]:0}' f2 f1
1 2 0.2 0
1 3 0.5 0
1 4 0.2 0.3
2 2 0.5 0
2 3 0.9 0.6
awk 'FNR==NR{a[$1,$2]=$3;next} {print $0, (a[$1,$2])? a[$1,$2]:0}' f2 f1
1 2 0.2 0
1 3 0.5 0
1 4 0.2 0.3
2 2 0.5 0
2 3 0.9 0.6