列 1 と同じ回数だけ行をコピーします。

列 1 と同じ回数だけ行をコピーします。

行をコピーする方法に関するいくつかの質問があります。ファイルの最初のフィールドにある特定の回数だけ各行を自動的にコピーしたいと思います。 2つのフィールドを持つ大きなファイルがあります。フィールド 1 は数値で、フィールド 2 はこれに関連する情報です。

12     AAA
18     BBB
25     CCC
33     DDD

最初のフィールドの数字と同じ数字を表すように各行をコピーします。だから私は「12 AAA」などの12行を望んでいます。

vimは各行をx回手動で貼り付けることができることを知っていますが(コピー後に「12p」)、大容量ファイルの場合はこれは多くの作業のようです。これを自動化できるスクリプトを知っている人はいますか?

答え1

GNU awkを使う:

#!/usr/bin/gawk -f
{ 
    for (c=strtonum($1) ; c ; c--) 
        print
}

答え2

awkJigglyNagaと同じ答え:

awk '{ c=0; while ($1>c++) print }' infile

答え3

別のawkソリューション:

<infile awk ' i=$1 { while(i--) print }' 

関連情報