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

相关内容