特定の変更を加えて行を複数回(100回)繰り返す方法

特定の変更を加えて行を複数回(100回)繰り返す方法

行のあるファイルがあります

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

関連情報