AWK PRINT 명령 출력

AWK PRINT 명령 출력

다음 출력으로 파일을 생성 중입니다.

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 ... ) )

관련 정보