行のあるファイルがあります
file1 -int sch1.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR
この変更(sch2、sch3、sch4 など)を加えてこの行を 100 回繰り返したい
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 で実行し、行の 2 番目の数字を 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
以下の回答は、現在の質問ではなく、投稿者の元の質問に基づいています。投稿者はこの回答を正しいものとして受け入れました。
#!/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