Script de shell para produzir saída duplicada com incrementos

0

Eu preciso de um script que produza a seguinte saída muitas vezes

@float Figure,fig:n
@cindex 
@image{n,9cm}.
@caption{}
@end float

mas onde n (as duas vezes) é substituído por 1, 2, 3, até um grande número.

Obrigado.

    
por johntait.org 13.08.2014 / 10:41

3 respostas

3
seq 1000 | sed 's/.*/@float Figure,fig:&\
@cindex \
@image{&,9cm}.\
@caption{}\
@end float\
/'

de uma maneira tradicional do Unix (veja como seq e sed são executados ao mesmo tempo e cooperam com a tarefa).

    
por 13.08.2014 / 11:22
3

Tente:

$ for n in {1..10}; do printf '@float Figure,fig:%s
> @cindex
> @image{%s,9cm}.
> @caption{}
> @end float
> ' ${n} ${n}; done

Ou como uma linha:

for n in {1..10}; do printf '@float Figure,fig:%s@cindex\n@image{%s,9cm}.\n@caption{}\n@end float\n' ${n} ${n}; done 

O texto acima é impresso 10 vezes, sem linhas vazias entre cada grupo. Altere o 10 nas chaves para números diferentes. Adicione outro \n no final da declaração printf longa para uma linha vazia.

    
por 13.08.2014 / 10:55
2

Você pode usar um loop com expansão de chaves e de várias maneiras de produzir saída. Vou usar um documento aqui :

for n in {1..100}
do
    cat <<EOT
@float Figure,fig:$n
@cindex 
@image{$n,9cm}.
@caption{}
@end float
EOT
done

Isso faz um loop sobre valores de n de 1 a 100 e imprime esse texto para cada um, com os valores apropriados de n substituídos a cada vez.

Se você não tiver o Bash, seq 1 100 terá o mesmo efeito que a expansão da chave; sem isso, um loop normal:

i=0; while [ $i -lt 100 ] ; do ... ; i=$((i + 1)) ; done

terá o mesmo efeito um pouco menos conciso.

    
por 13.08.2014 / 10:47