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

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

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

2 Solutions collect form web for “Распечатайте каждую строку несколько раз,”

В 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 
  • GNU Parallel - grepping n строк для m регулярных выражений
  • При загрузке большого файла сервер сообщает о некорректном размере файла
  • Заменить текст быстро в очень большом файле
  • Открытие файла журнала хранения в vi
  • Передача больших (8 ГБ) файлов по ssh
  • Есть ли у традиционных vi (not vim) поддержка больших файлов?
  • Почему эти файлы в фрагменте ext4 фрагментированы?
  • Редактируйте действительно большие файлы с помощью vi
  • Есть ли эффективный способ разбора блоков текста в python?
  • Linux и Unix - лучшая ОС в мире.