CSV aus Shell-Skript lesen und Spaltenüberschrift basierend auf der größten Übereinstimmung mit der Benutzereingabe drucken

CSV aus Shell-Skript lesen und Spaltenüberschrift basierend auf der größten Übereinstimmung mit der Benutzereingabe drucken

Ich habe eine CSV-Datei. Sie hat mehrere Spalten. Ich möchte ein Shell-Skript entwickeln, das zur Eingabe eines numerischen Werts auffordert, die beste Entsprechung in der CSV-Datei findet und die Spaltenüberschrift druckt. Zum Beispiel

        Apple       orange      grape      berry


1       1.3         1.9         0.4         1.756

2       2.1.        3.3         6.6         0.964

3      0.444        1.364       1.1         3.6

Wenn die Benutzereingabe 3,4 ist, dann ist der nächste Wert 3,3 und die Ausgabe sollte lauten: „Das ist Orange“.

Irgendwelche Ideen, wie ich das erreichen kann? (Zu Ihrer Information: CSV ist eine ziemlich große Datei.)

Antwort1

Das ist ein wenig unelegant, funktioniert aber

read -p "Enter a value .... " t
awk -v test=$t 'NR==1{min=1000;for (i=1; i<=NF; i++) head[i]=$i}
    NR>1 && NF>0{for (i=2; i<=NF; i++){diff=($i<test)?(test-$i):($i-test); if (diff<min) {min=diff; item=i-1} }}
    END{ print "Closest to "test" is "head[item]}' file

Ausgabe

Closest to 3.4 is orange

verwandte Informationen