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@a
indem Sie den Cursor auf dieser Zeile positionieren.
Wo:
qa
: startet die Aufzeichnung desa
Makrosyy
: reißt (kopiert) die ganze Zeile.p
: fügt es darunter einw
: 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 beenden98@a
: Führen Sie dasa
Makro 98 Mal aus.
Oder wenn file1 -int <something><number>.inp
am 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