구문 오류: 인용된 문자열이 끝나지 않았습니다. 찾을 수 없음 오류

구문 오류: 인용된 문자열이 끝나지 않았습니다. 찾을 수 없음 오류

더 큰 파일을 사용 가능한 데이터로 구문 분석하는 스크립트를 작성 중입니다. 아래에 스크립트를 첨부하겠습니다. 스크립트가 내가 원하는 방식으로 실행되지 않았습니다. 나는 그것이 내가 사용하고 있던 if/then 문일지도 모른다고 생각했지만, 취소하자 실제 문제가 드러났습니다. 이것이 제가 지금 겪고 있는 오류입니다. 이로 인해 실제 문제가 일종의 인용문처럼 보입니다.

FirstName,LastName,Company,Address,City,County,State,ZIP,Phone,Fax,Email,Web
FinalProject.sh: 36: FinalProject.sh: Syntax error: Unterminated quoted string

기술적으로는 구문 오류가 무엇을 의미하는지 이해하지만 문제가 무엇인지 찾을 수 없어 약 30분 동안 문제를 해결하려고 노력했습니다. 도움을 주시면 대단히 감사하겠습니다!

#!/bin/bash

OLDIFS=${IFS}
IFS=$'\n'

head -1 50000_a.csv | sed 's/"//g'
for LINE in 'grep WV 50000_a.csv | sed 's/"//g' | awk -F, '{print $(NF-11)"," \ 
    $(NF-10)"," \ 
    $(NF-9)"," \ 
    $(NF-8)"," \ 
    $(NF-7)"," \ 
    $(NF-6)"," \ 
    $(NF-5)"," \ 
    $(NF-4)"," \ 
    $(NF-3)"," \ 
    $(NF-2)"," \ 
    $(NF-1)"," \
    $NF \ 
}''
 do
    FNAME='echo ${LINE} | awk -F, '{print $1}''
    LNAME='echo ${LINE} | awk -F, '{print $2}''
    COMPANY='echo ${LINE} | awk -F, '{print $3}''
    ADDRESS='echo ${LINE} | awk -F, '{print $4}''
    CITY='echo ${LINE} | awk -F, '{print $5}''
    COUNTY='echo ${LINE} | awk -F, '{print $6}''
    STATE='echo ${LINE} | awk -F, '{print $7}''
    ZIP='echo ${LINE} | awk -F, '{print $8}''
    PHONE='echo ${LINE} | awk -F, '{print $9}''
    FAX='echo ${LINE} | awk -F, '{print $10}''
    EMAIL='echo ${LINE} | awk -F, '{print $11}''
    WEB='echo ${LINE} | awk -F, '{print $12}''
 done

답변1

일반적으로 말하면, "명령 실행"을 묶을 때 작은따옴표를 사용 하고 '...'백틱 또는 (더 나은)로 `...`묶어야 합니다 $(...).

for LINE in 'grep이렇게 하면 :으로 시작하고 다음으로 끝나는 줄이 }''실패하게 됩니다.
가능한 한 적은 변경 사항을 적용하면 코드는 다음과 같습니다.

#!/bin/bash

OLDIFS=${IFS}
IFS=$'\n'

head -1 50000_a.csv | sed 's/"//g'
for LINE in `grep WV 50000_a.csv | sed 's/"//g' | awk -F, '{print $(NF-11) "," \
    $(NF-10)"," \
    $(NF-9)"," \
    $(NF-8)"," \
    $(NF-7)"," \
    $(NF-6)"," \
    $(NF-5)"," \
    $(NF-4)"," \
    $(NF-3)"," \
    $(NF-2)"," \
    $(NF-1)"," \
    $NF \
}'`
do
    FNAME=`echo ${LINE} | awk -F, '{print $1}'`
    LNAME=`echo ${LINE} | awk -F, '{print $2}'`
    COMPANY=`echo ${LINE} | awk -F, '{print $3}'`
    ADDRESS=`echo ${LINE} | awk -F, '{print $4}'`
    CITY=`echo ${LINE} | awk -F, '{print $5}'`
    COUNTY=`echo ${LINE} | awk -F, '{print $6}'`
    STATE=`echo ${LINE} | awk -F, '{print $7}'`
    ZIP=`echo ${LINE} | awk -F, '{print $8}'`
    PHONE=`echo ${LINE} | awk -F, '{print $9}'`
    FAX=`echo ${LINE} | awk -F, '{print $10}'`
    EMAIL=`echo ${LINE} | awk -F, '{print $11}'`
    WEB=`echo ${LINE} | awk -F, '{print $12}'`
done

그러나 시도하는 것은 실수입니다for 루프를 사용하여 파일 처리, 당신은해야read출력을 얻기 위해grep:

#!/bin/bash

OLDIFS=${IFS}
IFS=$'\n'

head -1 50000_a.csv | sed 's/"//g'
while IFS=$'\n' read -r LINE
do
    FNAME="$(echo ${LINE} | awk -F, '{print $1}')"
    LNAME="$(echo ${LINE} | awk -F, '{print $2}')"
    COMPANY="$(echo ${LINE} | awk -F, '{print $3}')"
    ADDRESS="$(echo ${LINE} | awk -F, '{print $4}')"
    CITY="$(echo ${LINE} | awk -F, '{print $5}')"
    COUNTY="$(echo ${LINE} | awk -F, '{print $6}')"
    STATE="$(echo ${LINE} | awk -F, '{print $7}')"
    ZIP="$(echo ${LINE} | awk -F, '{print $8}')"
    PHONE="$(echo ${LINE} | awk -F, '{print $9}')"
    FAX="$(echo ${LINE} | awk -F, '{print $10}')"
    EMAIL="$(echo ${LINE} | awk -F, '{print $11}')"
    WEB="$(echo ${LINE} | awk -F, '{print $12}')"
done < <(
    grep WV 50000_a.csv | sed 's/"//g' | awk -F, '{print $(NF-11) "," \
    $(NF-10)"," \
    $(NF-9)"," \
    $(NF-8)"," \
    $(NF-7)"," \
    $(NF-6)"," \
    $(NF-5)"," \
    $(NF-4)"," \
    $(NF-3)"," \
    $(NF-2)"," \
    $(NF-1)"," \
    $NF \
    }'
)

관련 정보