Распечатайте каждую строку несколько раз,

У меня огромный файл, ~ 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 

Большое спасибо.

В awk :

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

Это будет считывать входной файл один раз и записывать выходной файл один раз, и не нужно ничего открывать.

В perl , используя оператор повторения строки x :

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