2016-05-05 16 views
-2

Ich habe einige CSV-Dateien mit folgendem Format im selben Ordner:Vergleich csv-Dateien Feld mit Werten

Name - Value - Number - Key 

Ich mag diese Dateien paarweise vergleichen und ihnen eine Punktzahl auf diese Weise geben. Wenn alle Namen in der Spalte Name der ersten Datei nicht in der entsprechenden Spalte der zweiten Datei enthalten sind, lautet die Bewertung 0. Wenn dies der Fall ist, wird das Ergebnis wie in diesem Beispiel angezeigt:

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 

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

So wird es sein gegeben durch die Summe der Abs (KeyB - ValueA)/NumberA Werte, wobei abs der absolute Wert der Subtraktion ist.

Wie kann ich das tun?

Antwort

1

Vor allem auf der Grundlage Ihrer Formel, abs(KeyB - ValueA)/NumberA, sollten Sie

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

statt

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

der 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

Du hast recht sein kann, es war mein Fehler! Jetzt ist es richtig geschrieben. Danke für die Lösung! – user2328149

Verwandte Themen