2016-05-05 46 views
-2

我有在同一文件夾下面的一些格式的CSV文件:使用領域比較CSV文件值

Name - Value - Number - Key 

我想比較這些文件配對,並給他們以這種方式得分。如果第一個文件的名稱列中的所有名稱都不在第二個文件的相應列中,則得分將爲0. 相反,如果是,則將按照此示例中給出的分數給出得分:

File1.csv

NameA, ValueA, NumberA, KeyA 

Jack, 10,  9,  12 
Alex, 30,  2,  16 
Mark, 15,  3,  18 

File2.csv

NameB, ValueB, NumberB, KeyB 

Jack, 13,  4,  11 
Alex, 22,  5,  18 
Bill, 67,  6,  20 
Mark 18,  8,  26 

分數= ABS(11 - 10)/ 9 + ABS(18 - 30)/ 2 + ABS(26 - 15)/ 3

所以它會由abs(KeyB-ValueA)/ NumberA分數的總和給出,其中abs是減法的絕對值。

我該怎麼做?

回答

1

首先,根據公式,abs(KeyB - ValueA)/NumberA,你應該有

Score = abs(11 - 10)/9 + abs(18 - 30)/2 + abs(26 - 15)/3 = 9.7778 

代替

Score = abs(11 - 10)/9 + abs(18 - 30)/2 + abs(26 - 15)/18 

awk命令可以

 awk -F, 'function abs(x){return ((x < 0.0) ? -x : x)} 
    BEGIN {while (getline < "file1.csv") { f[$1] = $2 ; g[$1] = $3; h[$1] = $4 } } 
    { if (g[$1] != 0) score+= abs($4 - f[$1])/g[$1] } END { print score } ' file2.csv 
+0

你說的沒錯,這是我的錯誤!現在它被寫入正確。感謝您的解決方案! – user2328149