GNU/Linux >> Linux の 問題 >  >> Linux

シェルパイプを介してCsvデータをSqliteテーブルに挿入する方法は?

結果を厳密な純粋なCSV形式で標準出力に出力するプログラムを作成しました(すべての行は単一のレコードを表し、同じコンマ区切りフィールドのセットを含みます。フィールドには小文字の英字、数字、ドットのみが含まれ、スペースは含まれません。エスケープ/エンコードが必要になる可能性のある引用符や記号はありません。

この出力を完全に収まるSQLiteテーブルにリダイレクトするにはどうすればよいですか?

制約を破る(たとえば、すでにテーブルにあるレコードと同じ主キー/二次キーを持つ)ことで既存のレコードを置き換えるか、サイレントに破棄するかを制御できれば素晴らしいと思います。

もちろん、プログラム自体に直接SQLiteデータベース出力サポートを構築することもできますが、可能であればUNIXの方法を使用したいと思います。

承認された回答:

2つのアプローチ:

サンプルtest.csv ファイル:

GroupName,Groupcode,GroupOwner,GroupCategoryID 
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102
Liberty Elementary Teachers,Elem Teachers,13559,103
1st Grade Teachers,1stgrade,,104
2nd Grade Teachers,2nsgrade,13561,105
3rd Grade Teachers,3rdgrade,13562,106
Guidance Department,guidance,,107

1 csvkitを使用 (CSVに変換して操作するための一連のコマンドラインツール)

sqlite3にインポートします データベース:

csvsql --db sqlite:///test_db --tables test_tbl --insert test.csv

入力csvファイルが指定されていない場合は、stdinからのcsvデータを受け入れます:

... | csvsql --db sqlite:///test_db --tables test_tbl --insert

sqliteからデータを抽出するには データベース:

sql2csv --db sqlite:///test_db --query 'select * from test_tbl limit 3'

出力:

GroupName,Groupcode,GroupOwner,GroupCategoryID 
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102

2 sqlite3を使用 コマンドラインツール(ユーザーが SQLiteに対してSQLステートメントを手動で入力して実行できるようにします データベース)

.import」を使用します 」コマンドを使用して、CSV(カンマ区切り値)データを
SQLiteテーブルにインポートします。 「.import 」コマンドは2つの引数を取ります。これらは、
CSVデータが読み取られるディスクファイルの名前と、
CSVデータが挿入されるSQLiteテーブルの名前です。

.import」を実行する前に、「mode」を「csv」に設定することが重要であることに注意してください。
" 指図。これは、コマンドラインシェルが入力ファイルのテキストを他の
形式として解釈しようとするのを防ぐために必要です。

$ sqlite3
sqlite> .mode csv
sqlite> .import test.csv test_tbl
sqlite> select GroupName,Groupcode from test_tbl limit 5;
"System Administrators",sysadmin
"Independence High Teachers","HS Teachers"
"John Glenn Middle Teachers","MS Teachers"
"Liberty Elementary Teachers","Elem Teachers"
"1st Grade Teachers",1stgrade
sqlite> 

Linux
  1. KVM ゲストをレスキュー シェルで起動する方法

  2. Linux で特定のインターフェイスを介してマルチキャスト パケットを送信する方法

  3. Iterm にタブ文字を挿入するにはどうすればよいですか?

  1. コマンドライン引数をシェルスクリプトに渡す方法は?

  2. *を介して隠しファイルを含むすべてのファイルを親ディレクトリに移動する方法

  3. Linuxシェルでcpコマンドを使用して、ディレクトリ全体を別のディレクトリにコピーするにはどうすればよいですか?

  1. シェルスクリプトでバッファにデータを追加する方法は?

  2. パイプからシェル変数に値を読み込む

  3. Linuxシェルスクリプトに新しい行を挿入するには?