我现在想从一个SQL命令responde提取值Shell脚本和SQL结果
服用点是这样的:
psql db -c "SELECT COUNT(test) FROM tbTest;"
结果是:
count
------
33176
(1 row)
我想提取33176的价值......有没有简单的方法来做到这一点?
我现在想从一个SQL命令responde提取值Shell脚本和SQL结果
服用点是这样的:
psql db -c "SELECT COUNT(test) FROM tbTest;"
结果是:
count
------
33176
(1 row)
我想提取33176的价值......有没有简单的方法来做到这一点?
如果它总是在格式返回(预期结果第3行),您可以使用此:
psql db -c "SELECT COUNT(test) FROM tbTest;" | tail -n 2 | head -n 1
的解释:
tail -n 2
将得到最后2行,然后通过head -n 1
处理,即获得前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"))
如果你能接受启动一个进程,但不两个(头和尾),你可以:
psql db -c "SELECT COUNT(test) FROM tbTest;" | sed -n -e '3p'
这总是假设输出的psql将4行,你需要第三个。
为什么使用不需要的东西?只需使用一些psql
选项...
> psql -At -c "SELECT COUNT(test) FROM tbTest;" db
115899
简化为:psql db -Atc'SELECT count(test)FROM tbtest' –
+1。如果你想选择多个列,这是特别有用的,因为它删除了空格。 – ojrac
通过封闭在反引号完整的shell命令,可以检索其结果到一个shell变量:
#/bin/sh
THECOUNT=`psql -A -t -c 'SELECT COUNT(*) FROM tbTest;' db`
echo "the count = $THECOUNT"
外观极好答案:d – Killercode
AH提供了更优雅的方案。 –