2016-05-05 47 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