gpt4 book ai didi

shell - awk 不检查语句是否正确它在输出中显示所有打印行

转载 作者:行者123 更新时间:2023-12-02 07:23:57 24 4
gpt4 key购买 nike

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

关于shell - awk 不检查语句是否正确它在输出中显示所有打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36351461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com