Como repetir uma linha várias vezes (100) com uma certa alteração

Como repetir uma linha várias vezes (100) com uma certa alteração

Eu tenho um arquivo com linha

file1 -int sch1.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR

Quero repetir esta linha 100 vezes com esta mudança (sch2, sch3, sch4 etc)

file1 -int sch2.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR
file1 -int sch3.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR
file1 -int sch4.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR

como posso fazer isso.

Muito obrigado antecipadamente. Rehan

Responder1

printf 'file1 -int sch%s.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR\n' {1..100}

Ou:

seq -f 'file1 -int sch%g.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR' 100

Ou:

jot -w 'file1 -int sch%d.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR' 100

Produziria toda a produção.

Se você quiser começar com isso:

file1 -int sch1.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR

linha no vim, e reproduzi-la com o segundo número da linha aumentado 99 vezes, você poderia fazer qayypw^Aq98@acom o cursor posicionado nessa linha.

Onde:

  • qa: começa a gravar a amacro
  • yy: puxa (copia) toda a linha.
  • p: cola por baixo
  • w: passa para a próxima palavra (para pular a primeira que também contém um número).
  • ^A(Ctrl+A): incrementa o número sob o cursor ou se não houver número sob o cursor, o próximo encontrado à direita dele.
  • q: terminar de gravar a macro
  • 98@a: execute a amacro 98 vezes.

Ou sempre que file1 -int <something><number>.inpfor encontrado no início de uma linha, reproduza a linha 100 vezes com o número aumentado:

perl -pe 'if (m{^file1 -int \S*?\K\d+(?=\.inp)}) {
            for my $i ($& .. $& + 99) {
              print;
              s//$i/;
            }
          }' < your-file

Responder2

Esta resposta é baseada na pergunta atual:

#!/bin/bash

string=$(cat infile)
echo "$string" > outfile
string=${string/sch1/sch%d}

for ((i=2; i<101; i++))
do
   printf "$string\n" "$i" >> outfile
done

# uncomment to overwrite input file
# mv outfile infile

A resposta a seguir é baseada na pergunta original do OP - não na pergunta atual. O OP aceitou esta resposta como correta.

#!/bin/bash

string=$(cat infile)
echo "$string" > outfile

for ((i=2; i<101; i++))
do
   echo "${string/sch1/sch"$i"}" >> outfile
done

# uncomment to overwrite input file
# mv outfile infile

informação relacionada