CSV ファイルに前の一致の列を追加します。

CSV ファイルに前の一致の列を追加します。

次の形式のCSVファイルがあります(;区切り記号)。

KEY;..;..;..;..;id1;..;..
SUBKEY;..;..
SUBKEY;..;..
SUBKEY;..;..

KEY;..;..;..;..;id2;..;..
SUBKEY;..;..
SUBKEY;..;..
SUBKEY;..;..

idで始まる各行から(列6)を取得し、で始まる次のKEY行に追加する必要がありますSUBKEY。したがって、結果は次のようになります。

SUBKEY;..;..;id1
SUBKEY;..;..;id1
SUBKEY;..;..;id1

SUBKEY;..;..;id2
SUBKEY;..;..;id2
SUBKEY;..;..;id2

Bashスクリプトでこれを行う方法を知っていますか?

ベストアンサー1

Awk解決策:

awk 'BEGIN{ FS = OFS = ";" }
     $1 == "KEY"{ id = $6; next }
     { print $0 (NF? OFS id : "") }' file.csv
  • FS = OFS = ";"-;フィールド区切り記号(FS)と出力フィールド区切り記号(OFS)として扱われます。
  • $1 == "KEY"{ id = $6; next }- 最初のフィールドが$16番目のフィールドの"KEY"文字列セット変数と同じ場合。次のレコードに強制移動します(現在のレコードをスキップ)。id$6
    nextawk
  • print $0 (NF? OFS id : "")- レコードにフィールドがある$0場合(組み込み変数として保証)、レコード全体を印刷/出力します。つまり、レコードが空でない場合 - レコードの末尾に (as ) と現在の値を追加します。
    NF;OFSid

出力:

SUBKEY;..;..;id1
SUBKEY;..;..;id1
SUBKEY;..;..;id1

SUBKEY;..;..;id2
SUBKEY;..;..;id2
SUBKEY;..;..;id2

おすすめ記事