次の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