使用awk匹配两个不同文件中的数字

时间:2014-04-11 13:50:14

标签: 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

如果前两列中的数字都存在于两个文件中,那么我们打印前两个数字和每个文件的第三个数字(例如,两者都有1 4,在f3中应该有{{ 1}};否则,如果f2中缺少两个第一个数字,则只在第四列中打印零。

这些示例的完整结果应为

1 4 0.2 0.3

我写的脚本如下:

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

但它只是查看相同的两个数字是否在同一行(它没有通过所有的f2文件)给出结果

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

1 个答案:

答案 0 :(得分:1)

这个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