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

LinuxシェルからのSQLクエリを含むCSVファイルの読み取り

テキストをデータベースとして扱うための Python ツールである https://github.com/harelba/q をご覧ください。デフォルトではスペースを使用してフィールドを区切りますが、-d , パラメータにより、CSV ファイルの処理が可能になります。

または、CSV ファイルを SQLite にインポートしてから、それに対して SQL コマンドを実行することもできます。これは少し努力すればスクリプト可能です。


csvsql (csvkit の一部) もあります!

指定された csv で sql を実行する (舞台裏で sqlite に変換する) だけでなく、サポートされている多くの sql データベースの 1 つに変換して挿入することもできます!

ここにコマンドの例があります (csvsql_CDs_join.sh にもあります):

csvsql --query 'SELECT CDTitle,Location,Artist FROM CDs JOIN Artists ON CDs.ArtistID=Artists.ArtistID JOIN Locations ON CDs.LocID = Locations.LocID' "[email protected]"

3 つのテーブルを結合する方法を示します (csv_dbs_examples の csv_inputs で利用可能)。

(csvlook によるフォーマットも csvkit の一部です)

インプット

$ csvlook csv_inputs/CDs.csv 

| CDTitle  | ArtistID | LocID |
| -------- | -------- | ----- |
| CDTitle1 | A1       | L1    |
| CDTitle2 | A1       | L2    |
| CDTitle3 | A2       | L1    |
| CDTitle4 | A2       | L2    |

$ csvlook csv_inputs/Artists.csv 

| ArtistID | Artist  |
| -------- | ------- |
| A1       | Artist1 |
| A2       | Artist2 |

$ csvlook csv_inputs/Locations.csv 

| LocID | Location  |
| ----- | --------- |
| L1    | Location1 |
| L2    | Location2 |

csvsql

$ csvsql --query 'SELECT CDTitle,Location,Artist FROM CDs JOIN Artists ON CDs.ArtistID=Artists.ArtistID JOIN Locations ON CDs.LocID = Locations.LocID' "[email protected]" | csvlook

プロデュース:

| CDTitle  | Location  | Artist  |
| -------- | --------- | ------- |
| CDTitle1 | Location1 | Artist1 |
| CDTitle2 | Location2 | Artist1 |
| CDTitle3 | Location1 | Artist2 |
| CDTitle4 | Location2 | Artist2 |

Linux
  1. Linuxでの並べ替えコマンドと例

  2. Ansibleを使用してcsvファイルからLinuxユーザーを作成する4つのステップ

  3. Linuxでのファイルパーミッションと例

  1. Bashを使用してファイルから行を読み取る:対その間?

  2. ファイルからGrepパターンを読み取る?

  3. lsでLinuxファイルのパーミッションを確認する

  1. Linuxシェルスクリプトでファイル内の単語を変更する方法

  2. Linuxシェルはymlファイルからフィールドの値を取得します

  3. シェル スクリプトで Linux を使用してテンプレートを作成しますか?