在shell脚本中将值查询到变量中

时间:2013-03-14 19:21:33

标签: sql postgresql shell

我有查询给我结果

 app_no
--------
(0 rows)

我只需要获取行部分,而且只需要数字。我将结果保存到变量中,但我无法解析它。

napp=`psql -U postgres appdb -c "select appno from app.apps where properties&2048=1024

cap=$(echo "$napp"|sed -n 's/[0-9][0-9] rows/\1/p')
echo "$cap"

我只需要行数,这也只是数字。

2 个答案:

答案 0 :(得分:1)

如果您需要匹配的appno条目数,那么您应该使用:

SELECT COUNT(*) FROM app.apps WHERE properties & 2048 = 1024

但答案将始终为0,因为条件始终为0或false。你需要两次相同的位,1024或两者都是2048。

SELECT COUNT(*) FROM app.apps WHERE properties & 1024 = 1024
SELECT COUNT(*) FROM app.apps WHERE properties & 2048 = 2048

在shell脚本编写时,坚持标题和摘要的SQL接口是一个麻烦。但是,psql手册表明-q-t可能有所帮助(也许-A也可能):

  • -A--no-align

    切换到未对齐的输出模式。 (否则,默认输出模式将对齐。)

  • -q--quiet

    指定psql应该安静地执行其工作。默认情况下,它会打印欢迎消息和各种信息输出。如果使用此选项,则不会发生这种情况。这对-c选项很有用。在psql中,您还可以设置QUIET变量以达到相同的效果。

  • -t--tuples-only

    关闭列名称和结果行计数页脚等的打印。这相当于\t命令。

答案 1 :(得分:0)

如果您想剪切字符串 as

napp=$(psql -U postgres appdb -c "
    select appno frpm app.apps
    where properties&2048=1024;"
)
cap=$(echo "$napp" | sed -nr 's/.*\(([0-9]+) rows.*/\1/p')
echo "$cap"

但更好的解决方案是Jonathan Leffler's一个