他の列の値に基づいてCSVファイルの行をコピーする

他の列の値に基づいてCSVファイルの行をコピーする

800行を超えるファイルがあります。各行には、私たちが測定しなければならない特性を持つ特定の数の個人があります(n = 3、5、または10)。測定する必要がある数値(n)に基づいて、各ファイルが独自の行を持つようにファイルを拡張したいと思います。
たとえば、

Row     Who/What        Description     n
8001    Maize line      Control         3

になります:

Row     Who/What        Description     n
8001    Maize line      Control         3
8001    Maize line      Control         3
8001    Maize line      Control         3

私はUnixに精通していませんが(まだ学んでいます!)txt / csvファイルを読んでから、4番目の列のnに基づいてコピーする必要があることを知っています。列ヘッダーを繰り返す必要はなく、単に整理のためのものです。誰かが私を助けることができますか?

ベストアンサー1

以下を試してくださいawk

awk 'NR==1{ print; next } { repeat=$NF; while (repeat--) print } ' infile

提供したサンプルファイルは.csvファイルではなく、コンマで区切る必要があります。-F入力ファイルで使用される区切り文字を指定するには、awkオプションを使用する必要があります。

awk -F, 'NR==1{ print; next } { repeat=$NF; while (repeat--) print } ' infile

コメントにある質問に答えるには、次のようにします。

awk 'NR==1{ print; next } { bakup=$1; repeat=$NF; 
            while (repeat--) { $1=bakup"."++dup; print }; dup=0 }' infile

おすすめ記事