同じcsvファイルの列を結合して新しいヘッダーで新しい列を作成する

同じcsvファイルの列を結合して新しいヘッダーで新しい列を作成する

次のCSVファイルがあります。

+------------+--------------+
| Category I | Sub-Category |
+------------+--------------+
|       1144 |          128 |
|       1144 |          128 |
|       1000 |          100 |
|       1001 |          100 |
|       1002 |          100 |
|       1002 |          100 |
|       1011 |          102 |
|       1011 |          102 |
|       1011 |          102 |
|       1011 |          102 |
|       1011 |          102 |
|       1011 |          102 |
|       1013 |          103 |
|       1013 |          103 |
|       1013 |          103 |
|       1013 |          103 |
|       1013 |          103 |
|       1013 |          103 |
|       1013 |          103 |
+------------+--------------+

上記の最初の列と2番目の列を連結して、次のように新しいランダムヘッダーを持つ新しい3番目の列を形成したいと思います。

+-------------+--------------+-----------------------+
| Category ID | Sub-Category | Arbitrary New Heading |
+-------------+--------------+-----------------------+
|        1144 |          128 |               1144128 |
|        1144 |          128 |               1144128 |
|        1000 |          100 |               1000100 |
|        1001 |          100 |               1001100 |
|        1002 |          100 |               1002100 |
|        1002 |          100 |               1002100 |
|        1011 |          102 |               1011102 |
|        1011 |          102 |               1011102 |
|        1011 |          102 |               1011102 |
|        1011 |          102 |               1011102 |
|        1011 |          102 |               1011102 |
|        1011 |          102 |               1011102 |
|        1013 |          103 |               1013103 |
|        1013 |          103 |               1013103 |
|        1013 |          103 |               1013103 |
|        1013 |          103 |               1013103 |
|        1013 |          103 |               1013103 |
|        1013 |          103 |               1013103 |
|        1013 |          103 |               1013103 |
+-------------+--------------+-----------------------+

私が知っている限り、私がよく使うユーティリティであるcsvkitには、これを達成する方法はありません。https://github.com/wireservice/csvkit/issues/930

高度なプログラミング知識を必要とせずにこれを達成するための簡単なソリューションは何ですか?

私はawkとsedが潜在的な解決策であることを曖昧に知っていますが、より良い(つまりより単純な)解決策がある場合に備えて、クエリをこれらに制限したくありません。

このソリューションは非常に大きなファイル(つまり、120,000行以上を含む)で動作する必要があります。

編集:ここからダウンロードしたい人の便宜のためにサンプルデータが含まれています。https://www.dropbox.com/s/achtyxg7qi1629k/category-subcat-test.csv?dl=0

ベストアンサー1

ミラーの使用(https://github.com/johnkerl/miller)とこのサンプル入力ファイル

Category ID,Sub-Category
1001,128
1002,127
1002,126
1004,122

そして走っている

mlr --csv put -S '$fieldName=${Category ID}." ".${Sub-Category}' input.csv >output.csv

あなたはやる

+-------------+--------------+-----------+
| Category ID | Sub-Category | fieldName |
+-------------+--------------+-----------+
| 1001        | 128          | 1001 128  |
| 1002        | 127          | 1002 127  |
| 1002        | 126          | 1002 126  |
| 1004        | 122          | 1004 122  |
+-------------+--------------+-----------+

csvsqlを実行することもでき、次のように動作します。

csvsql -I --query 'select *,("Category ID" || " " || "Sub-Category") fieldname from input' input.csv >output.csv

おすすめ記事