我在同一文件夹中有一些格式如下的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是减法的绝对值。
我该怎么做?
答案 0 :(得分: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