2011-08-17 3 views
5

Je veux actuellement extraire une valeur à partir d'une commande SQL RespondeScript Shell et SQL résultats

somehting comme ceci:

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

le résultat est:

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

Je veux extraire la valeur 33176 ... existe-t-il un moyen simple de le faire?

Répondre

2

Si on retourne toujours dans ce format (résultat attendu sur la ligne 3), vous pouvez utiliser ceci:

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

L'explication:

tail -n 2 obtiendra la dernière ligne 2 et traité par head -n 1 ce qui signifie, obtenir d'abord 1 ligne.

+0

excelent Réponse: D – Killercode

+4

AH fournit beaucoup plus solution élégante. –

1

Modifier: en réalité, cela ne fonctionne pas, désolé. Mais beuglements.

Si le résultat est toujours 4 lignes, et sans invoquer d'autres commandes qui créent un processus:

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

Ce travail aussi:

Fin modifier

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

Attention: la variable count ne sera pas disponible entre parenthèses parce que le tuyau (|) lance un nouveau processus. Donc, cela ne fonctionne pas:

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

Edit:

Si vous voulez compter dans une variable, vous pouvez:

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

Si vous pouvez accepter de lancer un processus, mais pas deux (tête et queue), vous pouvez:

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

Cela suppose toujours que la sortie de psql sera de 4 lignes et vous avez besoin du 3ème.

17

Pourquoi nettoyer avec les choses indésirables? Il suffit d'utiliser quelques psql options ...

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

simplifier en: psql db -Atc 'SELECT compte (test) FROM tbtest' –

+1

+1.Ceci est particulièrement utile si vous souhaitez sélectionner plusieurs colonnes, car cela supprime les espaces. – ojrac

3

En enfermant la commande shell complète en contre-apostrophes, vous pouvez récupérer son résultat dans une variable shell:

#/bin/sh 

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