У меня есть файл, содержащий строку
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