LoginSignup
nono826
@nono826

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SELECT文の実行結果の数値のみを変数に格納したい

解決したいこと

シェルスクリプト関連の質問になります。
特定のSELECT文を実行した際の結果の数値のみを変数に格納したいと考えております。

発生している問題

例として、下記のsqlファイルがあるとします。

select.sql

SELECT MAX(id)
FROM a_table
WHERE value_id = '123456'

これを踏まえた上で下記の通りのシェルスクリプト内を実行したとします。
※CONNECTION_CMDはA5M2に接続するための情報等を記載している変数になります。

ABC=$(psql ${CONNECTION_CMD} -c "¥i select.sql;")

echo "${ABC}"
 max
-----
 930
(1行)

上記を踏まえた上で、下記のようにABCの変数内に「select文実行時に取得したIDのみ」を格納するようにしたいです。

echo "${ABC}"
930

お手数ですが上記につきまして解決方法をご教授いただければと思います。

0

2Answer

SELECT した結果が常に例のように1行1カラムになる前提なら、以下のように書けます。

ABC=$(psql --csv ${CONNECTION_CMD} -c "\i select.sql;" | sed -n 2p)

psql --csv で出力を CSV 形式にし、 sed -n 2p で出力の2行目だけを取り出します。(1行目はカラム名のため)


Update: @te2ji さんが上げていた -t オプションを使えば sed が不要になりますね。

ABC=$(psql --csv -t -F ${CONNECTION_CMD} -c "\i select.sql;")
0

Your answer might help someone💌