
私は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 となり、出力は「これはオレンジです」となります。
これを実現する方法について何かご意見はありますか。(参考までに、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