쉘 스크립트에서 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

관련 정보