各行を複数回印刷しますが、異なる時間に印刷します。

各行を複数回印刷しますが、異なる時間に印刷します。

次のように約4000000行を含む巨大なファイルがあります。

文書:

1 
1 
2 
3 
2 
4 
...

デフォルトでは、各行には数値が含まれています。この例を考慮して、次のようなファイルを生成したいと思います。

新しいファイル:

1 
1 
2 
2 
3 
3 
3 
2 
2 
4 
4 
4 
4 
....

各行がn回繰り返されることを望みます。ここで、nは元の行に格納された数値です。

あなたが言ったように、ファイル容量はかなり大きく、最速の方法を探しています。現在私が実装したコードのボトルネックは、書き込むために新しいファイルを再度開く必要があることです。

今これをやっていますが、速度が遅すぎます。

while read i; do seq 1 ${i} | xargs -i -- echo $i >> newFile ;done < file

とても感謝しています。

答え1

存在するawk

awk '{ for (i = 1; i <= $1; i++) { print $0 } }' file > newFile

これにより、何も再開せずに入力ファイルを一度読み込み、出力ファイルを一度書き込みます。

答え2

では、文字列反復演算子をperl使用します。x

$ perl -ne 'print $_ x $_' file
1
1
2
2
3
3
3
2
2
4
4
4
4

関連情報