簡體   English   中英

使用awk匹配兩個不同文件中的數字

[英]Matching numbers in two different files using 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 4 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

但是它只是看是否相同的兩個數字在同一行中(它不會遍歷所有f2文件)作為結果

1 2 0.2 0
1 3 0.5 0
1 4 0.2 0
2 2 0.5 0
2 3 0.9 0

這個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM