次の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
答え2
注文する
Tried with below command
awk 'NR>1{print $1,$2,$1$2 }' file| sed '1i Category Sub-Category New Heading'
出力
Category Sub-Category 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