シェルスクリプトからcsvを読み取り、ユーザー入力に最も近い一致に基づいて列ヘッダーを印刷します。

シェルスクリプトからcsvを読み取り、ユーザー入力に最も近い一致に基づいて列ヘッダーを印刷します。

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

おすすめ記事