【问题标题】:awk is not checking if statment correclt its showing all the print lines in the outputawk 没有检查语句是否正确显示输出中的所有打印行
【发布时间】:2016-04-01 08:22:55
【问题描述】:

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

理想的输出应该只是上述行之一,但脚本正在将所有打印行打印为输出..请帮助

【问题讨论】:

  • 您尝试打印$1 吗?他的价值是什么?也许您不需要使用 awk .. 您应该使用标准 bash if 语句
  • 它使用 awk 读取 sql 查询的输出...正常,否则无法正常工作我想我需要将输出值分配给一个变量,所以我使用的是 awk

标签: shell awk


【解决方案1】:

awk's if 子句中没有then

语法应该如下所示

awk '
    {

    if(conditional-expression1)
        action1;
    else if(conditional-expression2)
        action2;
    else if(conditional-expression3)
        action3;
        .
        .
    else
        action n;
    }
   '
  • 如果条件表达式 1 为真,则动作 1 将为 执行。
  • 如果条件表达式 1 为假,则条件表达式 2 将被检查,如果为真,将执行 action2 并继续 像这样。如果没有 条件表达式为真。

修改如下

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

【讨论】:

  • else if 抛出语法错误 awk: cmd. line:7: else if ($1 == "P") awk: cmd. line:7: ^ 语法错误 awk: cmd. line:11: else if ($1 == "F") awk: cmd. line:11: ^ 语法错误
  • 请再检查一次
【解决方案2】:

一个更惯用的awk 版本将是

 $ awk '$1=="C"{text="Job J4051 has successfully run for date"} 
        $1=="P"{text=...} 
        ... 
        {print text, $2}' file

【讨论】:

    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2018-01-17
    • 2021-12-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多