2011-08-17 11 views
5

Actualmente Quiero extraer un valor de un Responde comandos SQLshell script y SQL resultados

somehting así:

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

el resultado es:

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

Quiero extraer el valor 33176 ... ¿hay alguna manera simple de hacer esto?

Respuesta

2

Si siempre está de regreso en ese formato (resultado esperado en la línea 3), puede utilizar esto:

psql db -c "SELECT COUNT(test) FROM tbTest;" | tail -n 2 | head -n 1 

La explicación:

tail -n 2 obtendrá el pasado 2 de línea y luego procesado por head -n 1 que significa, obtener la primera línea.

+0

excelente: D – Killercode

+4

AH proporciona una forma mucho más solución elegante. –

1

Editar: en realidad, esto no funciona, lo siento. Pero abajo funciona.

Si el resultado es siempre 4 líneas, y sin recurrir a ningún otro comando que crean un proceso:

(read; read; read count; read) < <(psql db -c "SELECT COUNT(test) FROM tbTest;") 
echo "$count" 

Esto también trabajar:

Fin de edición

psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count; read; echo "$count") 

Advertencia: la variable count no estará disponible entre paréntesis porque la tubería (|) inicia un nuevo proceso. Así que esto no funciona:

psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count; read) 
echo "$count" 

Editar:

Si desea contar en una variable, puede:

count=$(psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count_tmp; read; echo "$count_tmp")) 
1

Si usted puede aceptar para poner en marcha un proceso, pero no dos (cabeza y cola), usted podría:

psql db -c "SELECT COUNT(test) FROM tbTest;" | sed -n -e '3p' 

Esto siempre supone que la salida de psql serán 4 líneas y necesitas la tercera.

17

¿Por qué hacer el borrado con las cosas no deseadas? Sólo tiene que utilizar algunas opciones psql ...

> psql -At -c "SELECT COUNT(test) FROM tbTest;" db 
115899 
+0

simplificar a: psql db -Atc 'SELECCIONAR recuento (prueba) FROM tbtest' –

+1

+1.Esto es especialmente útil si desea seleccionar varias columnas, ya que elimina el espacio en blanco. – ojrac

3

Al encerrar el comando shell completa entre comillas sencillas, puede recuperar su resultado en una variable de shell: Respuesta

#/bin/sh 

THECOUNT=`psql -A -t -c 'SELECT COUNT(*) FROM tbTest;' db` 
echo "the count = $THECOUNT"