我正在尝试编写以下代码,但 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