(onde input
é um arquivo que contém o texto a ser repetido)
Com o GNU awk
(e supondo que a entrada não contenha bytes NUL):
awk -v n=100 -v RS='awk -v n=100 -v ORS= '
{all = all $0 RS}
END {while (n--) print all}' < input
' -v ORS= '{while (n--) print}' < input
Portável:
set --
n=100; while [ "$n" -gt 0 ]; do
set -- "$@" input
n=$((n - 1))
done
cat "$@"
(note que se a entrada não terminar com um caractere de nova linha, será adicionado um).
Você também pode fazer coisas como:
printf '%.0sstring1\nstring2\nstring3\n' {1..100}
Esse funcionará independentemente de qual byte input
contenha. Note, entretanto, que para valores maiores de n
, e se seu shell não tiver cat
builtin, você pode atingir o limite do sistema no tamanho dos argumentos para um comando (aqui cat
).
Com zsh
ou versões recentes de bash
ou ksh93
ou yash -o braceexpand
, para um texto fixo, você pode fazer coisas como:
repeat 100 print -l string{1..3}
com zsh
:
seq -f 'string1
string2
string%.0g' 3.0001 0.0001 3.0100
Se estamos sendo atrevidos, em sistemas com o GNU seq
instalado, também podemos fazer:
awk -v n=100 -v RS='awk -v n=100 -v ORS= '
{all = all $0 RS}
END {while (n--) print all}' < input
' -v ORS= '{while (n--) print}' < input