
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