So wiederholen Sie eine Zeile mehrmals (100) mit einer bestimmten Änderung

So wiederholen Sie eine Zeile mehrmals (100) mit einer bestimmten Änderung

Ich habe eine Datei mit Zeile

file1 -int sch1.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR

Ich möchte diese Reihe 100 Mal mit dieser Änderung wiederholen (sch2, sch3, sch4 usw.)

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

Wie kann ich das machen.

Vielen Dank im Voraus. Rehan

Antwort1

printf 'file1 -int sch%s.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR\n' {1..100}

Oder:

seq -f 'file1 -int sch%g.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR' 100

Oder:

jot -w 'file1 -int sch%d.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR' 100

Würde die gesamte Ausgabe erzeugen.

Wenn Sie damit beginnen möchten:

file1 -int sch1.inp -HOST all.q:1 -NJOBS 1 -TMPLAUNCHDIR

Zeile in vim und reproduzieren Sie sie mit der 99-fachen zweiten Nummer der Zeile. Sie können dies tun, qayypw^Aq98@aindem Sie den Cursor auf dieser Zeile positionieren.

Wo:

  • qa: startet die Aufzeichnung des aMakros
  • yy: reißt (kopiert) die ganze Zeile.
  • p: fügt es darunter ein
  • w: geht zum nächsten Wort (um das erste zu überspringen, das auch eine Zahl enthält).
  • ^A(Strg+A): erhöht die Zahl unter dem Cursor oder, wenn sich keine Zahl unter dem Cursor befindet, die nächste Zahl rechts davon.
  • q: Aufzeichnung des Makros beenden
  • 98@a: Führen Sie das aMakro 98 Mal aus.

Oder wenn file1 -int <something><number>.inpam Anfang einer Zeile steht, reproduzieren Sie die Zeile 100 Mal mit erhöhter Zahl:

perl -pe 'if (m{^file1 -int \S*?\K\d+(?=\.inp)}) {
            for my $i ($& .. $& + 99) {
              print;
              s//$i/;
            }
          }' < your-file

Antwort2

Diese Antwort basiert auf der aktuellen Frage:

#!/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

Die folgende Antwort basiert auf der ursprünglichen Frage des OP – nicht auf der aktuellen Frage. Der OP hat diese Antwort als richtig akzeptiert.

#!/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

verwandte Informationen