次の行を含むファイルがあります。
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でlineを実行し、カーソルが配置されている場所で行の2番目の数字を99倍に増やして再現しますqayypw^Aq98@a
。
どこ:
qa
:a
マクロ記録開始yy
:ライン全体をYank(コピー)します。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