我正在尝试编写以下代码,但 awk 没有正确检查 if 语句

#!/bin/bash 
 
sqlplus -S username/pwd << EOF 
 
SET ECHO off; 
Set FEEDBACK off; 
SET TRIMSPOOL on; 
SET TAB off; 
SET TERMOUT OFF; 
set HEADSEP off; 
SET HEADING on; 
SET LINESIZE 1000; 
SET WRAP off; 
set serveroutput off; 
 
SPOOL /tmp/sql_output.xls 
select  * from ( 
select  PROCESS_SRC_STATUS_IND,PROCESS_RUN_TIME_ID,PROCESS_ID from      raptore.tb_process_prod c  
where PROCESS_ID in (116) 
order by PROCESS_CREATE_DTM desc 
) 
where rownum=1 
 
spool off 
exit; 
EOF 
 
awk '{ 
 
if ( $1 == "C") 
then 
    print "Job J4051 has successfully run for date " $2  
 
elif ($1 == "P") 
then 
    print "Job J4051 is pending for date " $2  
 
elif ($1 == "F") 
then 
    print "Job J4051 is failed for date " $2 
 
}' /tempt/sql_output.xls 

sql查询输出:

C 20160330 116

脚本输出:

作业 J4051 已成功运行日期 20160330 作业 J4051 正在等待日期 20160330 日期为 20160330 的作业 J4051 失败

理想情况下输出应该只是上述行之一,但脚本正在打印所有打印行作为输出..请帮忙

请您参考如下方法:

awk的 if子句中没有then

语法应该如下所示

awk ' 
    { 
 
    if(conditional-expression1) 
        action1; 
    else if(conditional-expression2) 
        action2; 
    else if(conditional-expression3) 
        action3; 
        . 
        . 
    else 
        action n; 
    } 
   ' 
  • 如果条件表达式 1 为真,则 action1 将是 执行。
  • 如果条件表达式 1 为假,则条件表达式 2 将被检查,如果为真,action2 将被执行并继续 像这样。如果没有任何一个,将执行最后的 else 部分 条件表达式为真。

修改如下

awk '{ 
            if ( $1 == "C") 
                print "Job J4051 has successfully run for date " $2  
       else if ( $1 == "P" ) 
                print "Job J4051 is pending for date " $2  
       else if ( $1 == "F" ) 
                print "Job J4051 is failed for date " $2 
     } 
    '  infile 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!