Bash / awkを使用してcsvファイルの最初の列にスペースを埋める

Bash / awkを使用してcsvファイルの最初の列にスペースを埋める

一部のプロセス/計算を自動化しようとしている場合は、まず少し厄介な形式を指定する必要があります。CSVファイルセット。 (これにはbash要求に応じて使用します)。

csvファイルセットはおおよそ次の形式に従います。

CODE,Sitting,Jan,Feb,Mar,Apr,May,Jun,Jul,Totals
CLLK_J9,First Sitting,,,2,5,2,,,10
,Second Sitting,,,,,,,,1
RTHM_A8,First Sitting,,,1,,3,,,6
,Second Sitting,,,,,1,,,1
FFBJ_FA9,First Sitting,,,,8,6,,,25
,Second Sitting,,,,,11,,,12
UUYIOR_HJ9,First Sitting,,,1,3,6,,,17
IKRO_Lk8,First Sitting,,,,3,3,,,37
,Second Sitting,,,,6,11,,,34

ここに画像の説明を入力してください。

CODEこの列の空のフィールドを前の行のフィールドの内容で埋めようとします。通常、これらの空のフィールドは、列2の「2番目の座席」インスタンスの横に表示されます。したがって、上記の例の場合、結果は次のようになります。

CODE,Sitting,Jan,Feb,Mar,Apr,May,Jun,Jul,Totals
CLLK_J9,First Sitting,,,2,5,2,,,10
CLLK_J9,Second Sitting,,,,,,,,1
etc.

awkこれは非常に強力なユーティリティだと思われ、いくつかの文書を読み始めましたが、まだ進歩がありませんでした。アイデア?

トップ

ベストアンサー1

ミラーの使用(https://github.com/johnkerl/miller)とても簡単です。走る

mlr --csv fill-down -f CODE input.csv >output.csv

あなたはやる

+------------+----------------+-----+-----+-----+-----+-----+-----+-----+--------+
| CODE       | Sitting        | Jan | Feb | Mar | Apr | May | Jun | Jul | Totals |
+------------+----------------+-----+-----+-----+-----+-----+-----+-----+--------+
| CLLK_J9    | First Sitting  | -   | -   | 2   | 5   | 2   | -   | -   | 10     |
| CLLK_J9    | Second Sitting | -   | -   | -   | -   | -   | -   | -   | 1      |
| RTHM_A8    | First Sitting  | -   | -   | 1   | -   | 3   | -   | -   | 6      |
| RTHM_A8    | Second Sitting | -   | -   | -   | -   | 1   | -   | -   | 1      |
| FFBJ_FA9   | First Sitting  | -   | -   | -   | 8   | 6   | -   | -   | 25     |
| FFBJ_FA9   | Second Sitting | -   | -   | -   | -   | 11  | -   | -   | 12     |
| UUYIOR_HJ9 | First Sitting  | -   | -   | 1   | 3   | 6   | -   | -   | 17     |
| IKRO_Lk8   | First Sitting  | -   | -   | -   | 3   | 3   | -   | -   | 37     |
| IKRO_Lk8   | Second Sitting | -   | -   | -   | 6   | 11  | -   | -   | 34     |
+------------+----------------+-----+-----+-----+-----+-----+-----+-----+--------+

おすすめ記事