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が1つの変数になりたいと思います。以下は、同じものを取得するために使用するコマンドです。

Mail_Id=$(awk '/EMail_Id =/{print $NF}' date091217125531.txt) 

このコマンドの問題は、最後のEメールIDのみを提供し、すべては提供しないことです。すべての電子メールIDを取得する方法はありますか?そして、どのコマンドを実行すべきか。

答え1

最後の電子メールアドレスのみを受信するのは、それがあなたが要求したもの$NF(文字通り「最後のフィールドの値」)だからです。

mailid=$( awk -F ' *= *' '/^EMail_Id/ { print $2 }' file.in )

awkこれは、次の内容を印刷するために使用されます=(周辺スペースの削除)。フィールド区切り記号として使用すると、␣*=␣*行は2つのフィールド、つまり前のビット=と後のビットに分割されます。$2これら2つのフィールドのうち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 ... ) )

関連情報