2011-08-17 38 views
5

Tôi hiện muốn trích xuất một giá trị từ một responde lệnh SQLShell Script và SQL quả

somehting như thế này:

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

kết quả là:

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

tôi muốn trích xuất giá trị 33176 ... có cách nào đơn giản để làm điều này không?

Trả lời

2

Nếu nó luôn luôn quay trở lại ở chỗ định dạng (kết quả dự kiến ​​trên dòng 3), bạn có thể sử dụng này:

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

Lời giải thích:

tail -n 2 sẽ nhận được 2 dòng cuối cùng và sau đó được xử lý bởi head -n 1 có nghĩa là, nhận được 1 dòng đầu tiên.

+0

xuất sắc trả lời: D – Killercode

+4

AH cung cấp một nhiều hơn nữa giải pháp thanh lịch. –

1

Chỉnh sửa: thực sự, điều này không có tác dụng, xin lỗi. Nhưng những tác phẩm dưới đây.

Nếu kết quả luôn 4 dòng là, và không có cách gọi bất kỳ lệnh khác để tạo ra một quá trình:

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

này cũng làm việc:

End chỉnh sửa

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

Cảnh báo: biến số count sẽ không có sẵn trong ngoặc đơn bởi vì đường ống (|) khởi chạy một quy trình mới. Vì vậy, điều này không làm việc:

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

Edit:

Nếu bạn muốn đếm trong một biến, bạn có thể:

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

Nếu bạn có thể chấp nhận để khởi động một quá trình, nhưng không hai (đầu và đuôi), bạn có thể:

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

Điều này luôn luôn giả định rằng đầu ra của psql sẽ là 4 dòng và bạn cần thứ 3.

17

Tại sao lại nhét những thứ không mong muốn? Đơn giản chỉ cần sử dụng một số tùy chọn psql ...

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

đơn giản hóa thành: psql db -Atc 'CHỌN đếm (kiểm tra) TỪ tbtest' –

+1

+1.Điều này đặc biệt hữu ích nếu bạn muốn chọn nhiều cột, vì nó loại bỏ khoảng trắng. – ojrac

3

Bằng kèm theo lệnh vỏ hoàn toàn trong backticks, bạn có thể lấy kết quả của nó vào một biến shell:

#/bin/sh 

THECOUNT=`psql -A -t -c 'SELECT COUNT(*) FROM tbTest;' db` 
echo "the count = $THECOUNT" 
Các vấn đề liên quan