从awk退出主shell脚本

时间:2012-07-14 05:33:48

标签: shell awk

我有一个bash脚本调用这样的jar文件:

awk -f fileformat.awk list.txt | while read arg1 arg2 arg3 arg4 arg5; do    
    java -jar /bin/2dbf.jar arg1 arg2 arg3 arg4 arg5

    if [[ ${?} -eq 0 ]]; then
        echo "2dbf.jar finished at: `date "+%F %T"`"
        echo "---------------------------------------------"
    else
        echo "exiting..."
        exit 10
    fi
done

fileformat.awk如下所示:如果该行以#开头,或者没有5个字段退出该程序。

{ 
    if (NF == 5 && $1 !~ /#.*/) {
        print $0 
    } else { 
        print "incorrect file format"
        "exit 1"
    }
}

我想要的是exit 1脚本中的awk终止整个shell脚本。但实际上并没有,因为错误的选项,jar文件会引发异常。

1 个答案:

答案 0 :(得分:6)

因为你的exit在AWK程序中引用,它会产生一个子shell并退出 。并且因为您正在将错误消息打印到stdout,它会提供while循环。将您的AWK脚本更改为此脚本应该可以正常工作:

{ 
    if (NF == 5 && $1 !~ /#.*/) {
        print $0 
    } else { 
        print "incorrect file format" > "/dev/stderr"
        exit 1
    }
}