CSVファイルがあります。複数の列があります。数値を入力するように求められ、csvで最も近い一致を見つけて列見出しを印刷するシェルスクリプトを開発したいと思います。例えば
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
ユーザー入力が3.4の場合、最も近い値は3.3で、出力は「This is Orange」でなければなりません。
これを達成する方法のアイデア。 (注 - CSVはかなり大きなファイルです。)
ベストアンサー1
これは少しエレガントではありませんが、動作します。
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
出力
Closest to 3.4 is orange