簡體   English   中英

awk Lookup 2文件,打印匹配和Sencond Field的總和:

[英]awk Lookup 2 files, print match and Sum of Sencond Field:

我需要comapre兩個文件f1.txt和f2.txt並獲得匹配和不匹配,對於這種情況我要檢查f1.txt的第二個字段是否匹配f2.txt的第一個字段,如果是的話打印f1.txt的整行並打印f2.txt的第一個字段和f2.txt的第二個字段的Sum。 並且在f1.txt上找不到匹配狀態“NotFound”。

f1.txt

aa,10,cc,Jan-13
bb,20,cc,Feb-13
dd,50,cc,Mar-13

f2.txt

10,1500,ss
20,500,gg
10,2000,kk
10,15000,yy
20,500,zz,
35,250,tt

Output.txt的

aa,10,cc,Jan-13,10,18500
bb,20,cc,Feb-13,20,1000
dd,50,cc,Mar-13,NotFound,NotFound

這個awk應該這樣做

awk -F, 'FNR==NR {a[$1]+=$2;next} {if ($2 in a) print $0,$2,a[$2]; else print $0,"NotFound","NotFound"}' OFS=, f2.txt f1.txt
aa,10,cc,Jan-13,10,18500
bb,20,cc,Feb-13,20,1000
dd,50,cc,Mar-13,NotFound,NotFound

它是如何工作的:

awk -F, '                                       #Set Field separator to ,
    FNR==NR {a[$1]+=$2;next}                    #Read data from file f2.txt using field #1 as index and sum field #2 in to array a
    {if ($2 in a)                               #Test if field #2 in f1.txt is found in a
        print $0,$2,a[$2]                       #If found, print line of f1.txt with sum and index from array
        else print $0,"NotFound","NotFound"     #If not found print line of f1.txt with NotFound
    }
    ' OFS=, f2.txt f1.txt                       #Set Output field separator to , and read files

略短的版本:

awk -F, 'FNR==NR {a[$1]+=$2;next} {print $0 ","($2 in a?$2","a[$2]:"NotFound,NotFound")}' f2.txt f1.txt

暫無
暫無

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

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