
我有一個 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