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

관련 정보