如何將一行重複多次(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 中的行,然後將該行的第二個數字增加 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

以下答案基於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

相關內容