我目前想从SQL命令responde
中提取一个值 有点像这样:psql db -c "SELECT COUNT(test) FROM tbTest;"
结果是:
count
------
33176
(1 row)
我想提取33176值......有没有简单的方法可以做到这一点?
答案 0 :(得分:20)
为什么要捣乱不需要的东西?只需使用一些psql
选项......
> psql -At -c "SELECT COUNT(test) FROM tbTest;" db
115899
答案 1 :(得分:4)
通过在反引号中包含完整的shell命令,可以将其结果检索到shell变量中:
#/bin/sh
THECOUNT=`psql -A -t -c 'SELECT COUNT(*) FROM tbTest;' db`
echo "the count = $THECOUNT"
答案 2 :(得分:2)
如果总是以该格式返回(第3行的预期结果),您可以使用:
psql db -c "SELECT COUNT(test) FROM tbTest;" | tail -n 2 | head -n 1
解释:
tail -n 2
将获得最后2行,然后由head -n 1
处理,这意味着,获得前1行。
答案 3 :(得分:1)
编辑:实际上,这不起作用,抱歉。但是轰鸣声起作用。
如果结果总是4行,并且没有调用任何其他创建过程的命令:
(read; read; read count; read ) < <(psql db -c "SELECT COUNT(test) FROM tbTest;")
echo "$count"
这也有效:
结束修改
psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count; read; echo "$count")
警告:count
变量在括号中不可用,因为管道(|
)启动了一个新进程。所以这不起作用:
psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count; read)
echo "$count"
修改强>
如果您想要计算变量,您可以:
count=$(psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count_tmp; read; echo "$count_tmp"))
答案 4 :(得分:1)
如果您可以接受启动流程,而不是两个(头部和尾部),您可以:
psql db -c "SELECT COUNT(test) FROM tbTest;" | sed -n -e '3p'
这总是假设psql的输出是4行,你需要第3行。