Repete cada linha em um texto n vezes

2

Eu tenho um arquivo que se parece com isso

888
924
873
1374
.....

Os pontos indicam que eu tenho muito mais string, por volta de 3000. Eu quero repetir cada string n time, para ter algo assim:

888
888
888
924
924
924
873
873
873
....

Eu tentei escrever um pequeno código bash:

#! bin/bash

while IFS= read -r line

do 
    awk 'NR==line'
    awk 'NR==line'
    awk 'NR==line'
done < /<PATH_TO_FILE>

Mas não obtenho resultados. Eu pensei que esta era uma tarefa muito fácil, mas obviamente estou perdendo alguma coisa. Qualquer conselho?

    
por efrem 09.03.2015 / 12:07

3 respostas

4

Pode ser feito facilmente em perl :

perl -ne 'print $_ x 3' file

a saída acima de um oneliner:

$ perl -ne 'print $_ x 3' file
888
888
888
924
924
924
873
873
873
1374
1374
1374

Basta alterar o valor da amostra para suas necessidades.

Uma solução awk :

awk '{for (i = 1; i <= 3; i++) print }' file

Para corrigir seu script bash, usei o snippet a seguir:

#!/bin/bash

while read line
do
    for i in {1..3}; do echo $line; done
done < ./file
    
por Sylvain Pineau 09.03.2015 / 12:13
2

Existe um truque legal para imprimir uma string repetidamente:

$ printf "%0.s-" {1..10}
----------

Com base nisso, podemos percorrer o arquivo e imprimir a linha quantas vezes indicamos na expressão de chave:

while IFS= read -r line
do
printf "%0.s$line\n" {1..3}
done < file

Teste

                          change this number as you wish
                                                       v
$ while IFS= read -r line; do printf "%0.s$line\n" {1..3}; done < a
888
888
888
924
924
924
873
873
873
1374
1374
1374

Embora minha preferência seja usar um awk como esse, muito parecido com o que os outros postaram antes (boas respostas, a propósito):

awk -v tot=3 '{for (i=1; i<=tot; i++) print}' file
    
por fedorqui 09.03.2015 / 15:05
1

Você poderia simplesmente fazer isso por meio do sed.

$ sed 's/\(.*\)/\n\n/g' file
888
888
888
924
924
924
873
873
873
1374
1374
1374
    
por Avinash Raj 09.03.2015 / 14:06