使用字段值比较csv文件

时间:2016-05-05 03:00:19

标签: bash shell parsing csv unix

我在同一文件夹中有一些格式如下的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 个答案:

答案 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