Как повторить ряд несколько раз (100) с определенным изменением

Как повторить ряд несколько раз (100) с определенным изменением

У меня есть файл, содержащий строку

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

Я хочу повторить этот ряд 100 раз с этим изменением (sch2, sch3, sch4 и т.д.)

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

Как я могу это сделать.

Спасибо большое заранее. Рехан

решение1

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

Или:

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

Или:

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

Произведет весь объем производства.

Если вы хотите начать с этого:

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

строку в vim и воспроизвести ее, увеличив второе число строки в 99 раз; это можно сделать, qayypw^Aq98@aустановив курсор на эту строку.

Где:

  • qa: начинает запись aмакроса
  • yy: копирует всю строку.
  • p: вставляет его ниже
  • w: переход к следующему слову (чтобы пропустить первое, которое также содержит цифру).
  • ^A(Ctrl+A): увеличивает число под курсором или, если под курсором нет числа, то следующее, найденное справа от него.
  • q: завершить запись макроса
  • 98@a: запустить aмакрос 98 раз.

Или всякий раз, когда file1 -int <something><number>.inpвстречается в начале строки, воспроизведите строку 100 раз, увеличивая число:

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

решение2

Этот ответ основан на текущем вопросе:

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

Следующий ответ основан на оригинальном вопросе OP, а не на текущем вопросе. OP принял этот ответ как правильный.

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

Связанный контент