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