我有查询给我结果
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"
我只需要行数,这也只是数字。
答案 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一个