我有一个包含行的文件
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