Cómo repetir una fila varias veces (100) con un cambio determinado

Cómo repetir una fila varias veces (100) con un cambio determinado

tengo un archivo que tiene fila

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

Quiero repetir esta fila 100 veces con este cambio (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

Cómo puedo hacer esto.

Muchas gracias de antemano. Rehan

Respuesta1

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

O:

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

O:

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

Produciría toda la producción.

Si quisieras empezar con eso:

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

line en vim, y reproducirlo con el segundo número de la línea aumentado 99 veces, lo podrías hacer qayypw^Aq98@acon el cursor posicionado en esa línea.

Dónde:

  • qa: comienza a grabar la amacro
  • yy: tira (copia) toda la línea.
  • p: lo pega debajo
  • w: pasa a la siguiente palabra (para omitir la primera que también contiene un número).
  • ^A(Ctrl+A): incrementa el número debajo del cursor o si no hay ningún número debajo del cursor, el siguiente que se encuentra a su derecha.
  • q: terminar de grabar la macro
  • 98@a: ejecuta la amacro 98 veces.

O siempre que file1 -int <something><number>.inpse encuentre al comienzo de una línea, reproduzca la línea 100 veces con el número aumentado:

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

Respuesta2

Esta respuesta se basa en la pregunta actual:

#!/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

La siguiente respuesta se basa en la pregunta original del OP, no en la pregunta actual. El OP aceptó esta respuesta como correcta.

#!/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

información relacionada