2011-08-17 24 views
5

Io attualmente desidera estrarre un valore da un responde comando SQLShell Script e SQL risultati

somehting come questo:

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

il risultato è:

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

Voglio estrarre il valore 33176 ... c'è un modo semplice per farlo?

risposta

2

Se è sempre tornare in quel formato (risultato atteso sulla linea 3), è possibile utilizzare questo:

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

La spiegazione:

tail -n 2 otterrà l'ultima linea 2 e poi elaborato da head -n 1 che significa, ottenere prima 1 riga.

+0

eccellente risposta: D – Killercode

+4

AH fornisce una molto più soluzione elegante. –

1

Modifica: in realtà, questo non funziona, mi spiace. Ma muggisce funziona.

Se il risultato è sempre 4 linee, e senza invocare altri comandi che creano un processo:

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

questo lavoro anche:

Fine modifica

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

Attenzione: la variabile count non sarà disponibile tra parentesi perché la pipe (|) avvia un nuovo processo. Quindi questo non funziona:

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

Edit:

Se si vuole contare in una variabile, è possibile:

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

Se si può accettare di avviare un processo, ma non due (testa e coda), è possibile:

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

Presuppone sempre che l'uscita di psql saranno 4 righe e hai bisogno del 3 °.

17

Perché masticare con le cose indesiderate? Basta usare alcune opzioni psql ...

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

semplificare a: psql db -Atc 'SELECT count (test) FROM tbtest' –

+1

+1.Ciò è particolarmente utile se si desidera selezionare più colonne, in quanto rimuove gli spazi bianchi. – ojrac

3

Con che racchiude il comando completo della shell in backticks, è possibile recuperare il risultato in una variabile shell:

#/bin/sh 

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