2017-01-21 11 views
0

からsqlite3のデータベースを作成します。私はこの実行している複数行のsed出力

sed -ne '/###SECTION-1###/,/###SECTION-2###/p file 

をそして、それは、この出力:私はそれように、上記の出力を使用してsqliteのデータベースを作成したい

###SECTION-1### 

ColumnA: 1a 
ColumnB: 2b 
ColumnC: 3c 
ColumnA: Z9 
ColumnB: Y8 
ColumnC: X7 

###SECTION-2### 

ColumnA ColumnB ColumnC 
------- ------- ------- 
1a  2b  3c 
Z9  Y8  X7 

私は次のようなものに見えますが、私はtルーブルは元のsedコマンドから$ columna、$ columnb、$ columncを割り当てます。

sqlite3 /tmp/test.db "INSERT OR IGNORE INTO data (ColumnA, ColumnB, ColumnC) values ('$columna', '$columnb', '$columnc');" 

どのように$ columna、$ columnb、$ columncを割り当てるのですか?

+0

sqlite3コマンドが機能するので、私は元の出力から$ columna、$ columnb、$ columncを割り当てるのが面倒です。質問をフレーズするより良い方法は、「複数行の出力から変数を割り当てる方法」です。 – lollan

+1

あなたが言うとき、「元のawkコマンド」から。どのようなawkコマンド? – jas

+0

@jas固定 - これはsed出力です – lollan

答えて

0

私はawkと、sed IMHOよりも読み(および書き込み)することがはるかに容易であるということだろう。

awk '/^ColumnA:/{a=$2} 
    /^ColumnB:/{b=$2} 
    /^ColumnC:/{c=$2; printf("sqlite2 /tmp/test/db \"INSERT (ColumnA,ColumnB,ColumnC) values ('\''%s'\'','\''%s'\'','\''%s'\'');\"\n",a,b,c)}' file.txt 

したがって、"ColumnA:"で始まる行が表示されたら、2番目のフィールドをaとして保存します。 "ColumnB:"で始まる行が表示されたら、2番目のフィールドをbとして保存します。我々は"ColumnC:"で始まる行を見ると、私たちは、私はわかりやすくするために省略しているSQLのものを(cように、第2のフィールドを保存して印刷します。

サンプル出力

sqlite2 /tmp/test/db "INSERT (ColumnA,ColumnB,ColumnC) values ('1a','2b','3c');" sqlite2 /tmp/test/db "INSERT (ColumnA,ColumnB,ColumnC) values ('Z9','Y8','X7');" 

またはワンライナーとして

awk '/^ColumnA:/{a=$2} /^ColumnB:/{b=$2} /^ColumnC:/{c=$2; printf("sqlite2 /tmp/test/db \"INSERT (ColumnA,ColumnB,ColumnC) values ('\''%s'\'','\''%s'\'','\''%s'\'');\"\n",a,b,c)}' file.txt 

それが正しいようであれば、あなたは実際の実行のためにbashに出力を送信することができます

awk '{...}' file.txt | bash 
+0

これは幻想的で、私が必要としていたものです。どうもありがとうございました! – lollan

+0

私の喜び - 助けになるのはうれしいです。あなたのプロジェクトに幸運。 –

0

さらなる処理にsedを使用したかったとは言わず、multiline replacements are not easyでも可能です。

まず、SECTION行を削除します。 はその後、SQL文の適切な部分でColumnX:テキストを置き換える:

sed -ze "s/ColumnA: /INSERT OR IGNORE INTO data(ColumnA, ColumnB, ColumnC) VALUES('/g;s/\nColumnB: /', '/g;s/\nColumnC: \([^\n]*\)\n/', '\1');\n/g" 
関連する問題