次のように約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