다음 줄이 포함된 파일이 있습니다.
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에서 line을 실행하고 커서가 위치한 곳에서 줄의 두 번째 숫자를 99배로 늘려서 재현합니다 qayypw^Aq98@a
.
어디:
qa
:a
매크로 기록 시작yy
: 전체 라인을 Yank(복사)합니다.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