【问题标题】:Assign AWK result to variable [duplicate]将AWK结果分配给变量[重复]
【发布时间】:2011-08-27 06:13:49
【问题描述】:

这应该很简单,我不知道我为什么要为此苦苦挣扎。

我正在一个 shell 脚本中运行以下 psql 命令,以便在插入数据之前找出是否所有索引都已删除。

INDEXCOUNT=$(psql -p $dbPort -U enterprisedb -d main_db -c "select Count(*) from all_indexes where index_schema = 'enterprisedb';")

此时,INDEXCOUNT 等于“COUNT ------- 0”

现在,如果我回显以下行,我会得到我想要的结果 -

echo $INDEXCOUNT | awk '{print $3}'

如何将$INDEXCOUNT | awk ‘{print $3}’ 的值分配给变量以在“IF”语句中检查它?

例如:

RETURNCOUNT=$INDEXCOUNT | awk '{print $3}'

【问题讨论】:

    标签: linux postgresql shell scripting awk


    【解决方案1】:

    以下在 bash 上正常工作:

     a=$(echo '111 222 33' | awk '{print $3;}' )
     echo $a # result is "33"
    

    另一种选择是将字符串转换为数组:

     a="111 222 333"
     b=($a)
    
     echo ${b[2]}  # returns 333
    

    【讨论】:

    • RETURNCOUNT=$(echo $INDEXCOUNT | awk '{print $3}')
    【解决方案2】:

    你可以试试这个:

    RETURNCOUNT=`echo $INDEXCOUNT | awk '{print $3}'`
    

    这个想法是在反引号之间包含任何 shell 命令,以将结果放入变量中。

    【讨论】:

    • "$INDEXCOUNT" 不太可能是命令。
    • @glenn:在这种情况下,可以使用 echo... 这个想法是在反引号之间包含任何 shell 命令以将结果放入变量中
    • $() 优于 backticks,因为它使嵌套命令更容易
    • 虽然此代码可能有助于解决问题,但提供有关 why 和/或 如何 回答问题的附加上下文将显着改善长期价值。请edit你的答案添加一些解释。
    【解决方案3】:

    也可以直接使用:

    ${INDEXCOUNT##* }
    

    【讨论】:

      【解决方案4】:

      这可能更容易用于使用 if 语句进行测试/

      INDEXCOUNT="111 222 333"
      echo $INDEXCOUNT | awk '{if ($3 == 333) print $3}';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多