다음 출력으로 파일을 생성 중입니다.
SQL> declare
2 v_mail_id varchar2(300);
3 begin
4 SELECT user_mail_id INTO v_mail_id FROM XYZ where col1='Test';
5 dbms_output.put_line('EMail_Id'||' = '||v_mail_id);
6
7 END;
8 /
EMail_Id = [email protected] [email protected] [email protected]
SQL> spool off;
이제 모든 이메일 ID가 하나의 변수에 있기를 원합니다. 아래는 동일한 것을 얻기 위해 사용하는 명령입니다.
Mail_Id=$(awk '/EMail_Id =/{print $NF}' date091217125531.txt)
이 명령의 문제점은 마지막 이메일 ID만 제공하고 전부는 제공하지 않는다는 것입니다. 모든 이메일 ID를 얻을 수 있는 방법이 있나요? 그리고 어떤 명령을 실행해야 하는지.
답변1
마지막 이메일 주소만 받는 이유는 그것이 당신이 요청한 것 $NF
(말 그대로 "마지막 필드의 값")이기 때문입니다.
mailid=$( awk -F ' *= *' '/^EMail_Id/ { print $2 }' file.in )
awk
이는 다음에 나오는 내용을 인쇄 하는 데 사용됩니다 =
(주변 공간 제거). 필드 구분 기호로 사용하면 ␣*=␣*
행이 두 개의 필드, 즉 앞의 비트 =
와 뒤의 비트로 분할됩니다. $2
이 두 필드 중 두 번째 필드에 액세스할 수 있습니다(여기에서도 사용할 수 있음 ) $NF
.
그리고 sed
:
mailid=$( sed -n '/^EMail_Id *= */s///p' file.in )
이 sed
표현식은 /^EMail_Id *= */s///
먼저 일치하는 행을 찾은 다음 ^Email_Id *= *
해당 행에 대체를 적용합니다. ///
대체에서 빈 패턴은 /^EMail_Id *= */
범위 표현식( )에 사용된 것과 동일한 패턴을 사용한다는 의미이고, 빈 대체 문자열은 입력 줄에서 일치하는 부분이 제거된다는 의미입니다.
값은 입니다 mailid
.[email protected] [email protected] [email protected]
을 사용 bash
하고 배열 변수를 생성하려면 다음을 사용하십시오.
mailid=( $( ... as above ... ) )