행이 있는 파일이 있습니다.
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에서 줄을 실행하고 줄의 두 번째 숫자를 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