从 shell 脚本读取 csv 并根据与用户输入最接近的匹配打印列标题

从 shell 脚本读取 csv 并根据与用户输入最接近的匹配打印列标题

我有一个 csv 文件。它有多个列。我想开发一个 shell 脚本,提示使用数值,在 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

相关内容