Shell脚本和SQL结果

时间:2011-08-17 13:38:41

标签: shell postgresql

我目前想从SQL命令responde

中提取一个值 有点像这样:

psql db -c "SELECT COUNT(test) FROM tbTest;"

结果是:

 count
------
 33176
(1 row)

我想提取33176值......有没有简单的方法可以做到这一点?

5 个答案:

答案 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行。