特定の変更を適用して行を複数回(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でlineを実行し、カーソルが配置されている場所で行の2番目の数字を99倍に増やして再現しますqayypw^Aq98@a

どこ:

  • qa:aマクロ記録開始
  • yy:ライン全体をYank(コピー)します。
  • p:以下に投稿してください。
  • w:次の単語に移動します(数字を含む最初の単語をスキップ)。
  • ^A(Ctrl + A):カーソルの下に数字を増やします。カーソルの下に数字がない場合は、右側で次の数字を探します。
  • q: マクロ記録完了
  • 98@aaマクロを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

関連情報