Shell: 중첩된 줄을 읽는 동안

Shell: 중첩된 줄을 읽는 동안

doc1.lst와 doc 2.lst라는 두 개의 문서가 있고 각 행의 내용을 가져와 SQL 쿼리의 매개 변수로 사용하려고 합니다.

비슷한거 해봤는데 수정좀 부탁드려요

    file=doc1.lst
    while read line
    do
       p1=$line;

    file=doc2.lst
    while read line
    do
       p2=$line;

        sqlplus64 $User/$Pass@$ORACLE_SID << EOF2
        @update.sql p1 p2

    done < echo "Ok"
    done < echo "Ok"
    EOF2

문제는 각 행의 값을 가져와서 sqlplus 쿼리에 표시된 대로 테이블을 업데이트할 수 있도록 매개변수(p1 및 p2)로 제공하고 싶다는 것입니다.

더 나은 이해를 위해 내 파일 doc1.lst는 다음과 같습니다.

    AAA
    ABC
    EDF

내 파일 doc2.lst:

    30
    10
    30

이 값으로 테이블을 업데이트하고 싶습니다.

답변1

내가 이해한 바로는( <<EOF2마지막 부분이 무엇인지 완전히 명확하지 않음) 최종 결과는 다음을 입력하는 것입니다 sqlplus64.

@update.sql AAA 30
@update.sql ABC 10
@update.sql EDF 30

이 콘텐츠를 생성하려면 두 파일의 콘텐츠를 반복하는 대신 두 파일을 결합하면 됩니다. paste두 파일 모두에서 ( )를 사용 paste doc1.lst doc2.lst하면

AAA     30
ABC     10
EDF     30

( paste기본적으로 탭으로 연결됩니다). Gives를 사용하여 paste -d ' ' doc1.lst doc2.lst구분 기호 변경

AAA 30
ABC 10
EDF 30

그런 다음 접두사로 추가해야 합니다 . 각 줄의 시작 부분( )을 접두어로 바꾸면 @update.sql됩니다 .sed^

paste -d ' ' doc1.lst doc2.lst | sed 's/^/@update.sql /'

원하는 결과를 만들어 보세요.

그런 다음 한 번에 입력할 수 있습니다 sqlplus64.

paste -d ' ' doc1.lst doc2.lst | sed 's/^/@update.sql /' | sqlplus64 $User/$Pass@$ORACLE_SID

exit스크립트 끝에 입력 해야 하는 경우 sqlplus64:

(paste -d ' ' doc1.lst doc2.lst | sed 's/^/@update.sql /'; echo exit) | sqlplus64 $User/$Pass@$ORACLE_SID

실제로 한 줄씩 실행하고 싶다면 while read결과의 각 줄을 입력하면 됩니다 sqlplus64.

관련 정보