2017-07-27 4 views
0

私はから文字を描画するすべての行削除するために探しています:ヘッダーとフッターを取り除く-tオプションを追加するpsql非選択:書式を削除して特定の列のみを表示する方法?

PGPASSWORD="..." psql -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner 
node_id | hostname | port | status | lb_weight | role 
---------+---------------+------+--------+-----------+--------- 
0  | 10.20.30.40 | 5432 | 2  | 0.500000 | primary 
1  | 10.20.30.41 | 5432 | 2  | 0.500000 | standby 
(2 rows) 

を、しかし、垂直バーがまだ存在している:

PGPASSWORD="..." psql -t -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner 
0  | 10.20.30.40 | 5432 | 2  | 0.500000 | primary 
1  | 10.20.30.41 | 5432 | 2  | 0.500000 | standby 

。なお、この質問は、show pool_nodesと他の同様の非select SQLステートメントに固有のものです。

私の現在の回避策は、Linux cutコマンドを巻き込むことです:

<previous command> | cut -d '|' -f 4 

質問は2つの部分があります:psqlを使用するだけで、縦棒が上記削除することができますどのように

  1. を?
  2. psqlの使用方法は、特定の列(たとえば、status)または列のみを表示できますか?たとえば、結果はたった2行で、それぞれ数字が2であることがあります。

私はCentOS 7サーバでpsqlバージョンpsql (PostgreSQL) 9.2.18を使用しています。スクリプトpsql使用psql -qAtXについては

答えて

0

  • q uiet
  • t uples専用
  • 国連A ligned出力
  • FILTに.psqlrcX

読んでいませんそれらの列には、SELECTリストに名前を付ける必要があります。 psqlは、常にサーバーから取得した完全な結果セットを出力します。例えば。 SELECT status FROM pool_nodes

cutまたはordinalカラム番号を抽出することができます。

psql -qAtX -c 'whatever' | cut -d '|' -f 1,2-4 

は何か他のもの、使用するパイプ|から区切り文字を変更するには(私はSHOWは、単一のスカラー値を返しますので、show pool_nodesは...、あなたがここに表示された出力を生成することができますか分かりません) -F-F ','。しかし、区切り文字は出力に現れたときにエスケープされないことに注意してください。これはCSVではありません。タブは便利なオプションと考えることもできます。これを行うには引用符付きリテラルタブを入力する必要があります。 (インタラクティブシェルでそれを行う場合は、 "bashにリテラルタブを入力する方法"が表示されます。

上記のすべて、与えられたダミーデータを示す例:

CREATE TABLE dummy_table (
    a integer, 
    b integer, 
    c text, 
    d text 
); 

INSERT INTO dummy_table 
VALUES 
(1,1,'chicken','turkey'), 
(2,2,'goat','cow'), 
(3,3,'mantis','cricket'); 

クエリを、列区切り文字として単一のスペースで(つまり、あなたのデータにスペースを持って良くないのです!):

psql -qAtX -F ' ' -c 'SELECT a, b, d FROM dummy_table' 

何らかの理由で、あなたが代わりにcutで列序によってフィルタリングすることができますSELECTのために列リストを生成することができない場合は、次の

psql -qAtX -F '^' -c 'TABLE dummy_table' | cut -d '^' -f 1-2,4 
+0

-qAtX'はまだ縦含ま '使用して出力すべてのスペーシングが削除されたバー。残念ながら、これは質問に答えるものではありません。私のOPはすでに 'カット'の回避策を示しています(注意:あなたの-fと-cオプションの使用は正しくありません)。しかし、試していただきありがとうございます! –

+0

脳領域は「切断」されています。だから、あなたは何を達成しようとしていますか?あなたの質問は、「垂直バーを取り除く」(パイプ)を取り除くだけではあまり効果的ではなく、そうすることによって達成しようとしている基本的な目標が何であるかは不明です。 *出力列の幅は固定されておらず、出力データに依存する*ので、char列範囲による 'cut 'は確実に動作しません。区切り文字を変更したい場合は、マニュアルページ '-F、'を参照してください。しかし、これはCSVを生成しないことに注意してください - データ結果の中の '、'は*エスケープされません*。 –

+0

精緻化。あなたの実際の根本的な目標は何かを説明するべきでしょうか? –

関連する問題