我有查询,结果为
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"
我只需要行数,这也只是数字。
我有查询,结果为
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"
我只需要行数,这也只是数字。
如果您需要appno匹配的条目数,那么您可能应该使用:
SELECT COUNT(*) FROM app.apps WHERE properties & 2048 = 1024
但答案总是 0,因为条件总是给出 0 或假。您需要两次相同的位,要么都是 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命令。
如果要按原样剪切字符串:
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 的解决方案