[완료] 쉘스크립트에서 화일 append하는 커맨드?
글쓴이: mack97 / 작성시간: 토, 2007/02/24 - 2:17오전
안녕하세요.
쉘스크립트를 이용해서 화일 append를 다음과 같이 하고 있습니다. 총 41개의 화일을 append하는데요, 각 화일은 0 부터 40번까지
이름을 가진 .dat화일이구요, 모두 합친 화일은 all.dat가 됩니다. 중간에 cat 명령을 이용해서 합치는데, 문제는
화일사이즈가 크면 엄청 느려집니다. 이렇게 무식하게 하는 방법말구 없는지요?
set inum = 0
set tnum = 40
set lnum = 1
while ( $lnum )
cp all.dat tmp.dat
cat tmp.dat ${inum}.dat > all.dat
rm -rf tmp.dat
if ( $inum == $tnum ) set lnum = 0
@ inum += 1
그럼 좋은 하루 되세요.
Forums:
set inum = 0set tnum =
해보세요.. 약간은 빨라질지도..
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
cat *.dat > all.dat 물론
cat *.dat > all.dat
물론 *.dat 는 input들만 있고, all.dat 는 처음에 없다고 가정하고..
주어진 파일이
주어진 파일이 알파벳 순서가 아니기 때문에 이 방법은 문제가 있습니다.
1부터 10이라면 1, 10, 2, 3, 4, 5, 6, 7, 8, 9 의 순서로 가게 되지요.
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
rm new.dat && for I in `seq
rm new.dat && for I in `seq 0 40` ; do cat $I.dat >> new.dat ; done
cat `seq -f'%g.dat' 0 40` >
흠.. 파일이 많지 않다면 이 방법은 어떨까요.
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
오호 좋고..
seq 명령 오늘 처음 봤네요 -_-..
고거 참 좋군요..sequence 에는 왔다네요..
혹시 이거 POSIX에 포함되어 있는 명령어인지??
아님 GNU tool에만 있는건지??
본래 sh에 C의 for문과
본래 sh에 C의 for문과 같은 방법이 없기 때문에
unix 계열에서 자주 쓰이는 명령어로 오래전 부터 있는 명령어입니다.
이것은 검은해*님이 예를 보여주셨구요.
뭐.. bash에는
과 같이 사용할 수 있는 확장이 있긴합니다만
일반 본쉘을 쓴다고 가정하는 범용 스크립트에서는 유용하지 못합니다.
현재 gnu tool이 안깔린 유닉스를 만져볼 기회가 없어서
seq 옵션은 확실하지 않지만 man page에 언급이 없는 것으로 보아
gnu 확장은 아닌 듯 싶군요.
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
http://www.unix.org.ua/orelly
http://www.unix.org.ua/orelly/unix/upt/ch45_11.htm
(차마 이름을 적지는 못하겠... =33 )
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
cat 명령 소요시간은
cat 명령 소요시간은 별반 차이 없을 겁니다.
원문을 보니 "cp all.dat tmp.dat" 부분에서 파일을 복사하니
파일이 커질수록 시간이 많이 걸릴 수 밖에 없죠.
cp를 mv로 고치면.. 원문 그대로 쓸 수 있겠군요.
cat *.dat > all.dat 는 순서가 문제 없으면 가장 좋은..
순서대로 합친다면 문제가 있는 것이고..
워낙 많은 방법이 있는 거라서 정답이랄게..
한줄로처리하는 방법은 요런것도..
echo a|awk '{printf "cat ";for(i=S;i<=E;i++) printf " %s.dat",i}' S=0 E=40 | sh > all.dat
태크 -_-
echo a|awk '{printf "cat ";for(i=S;i<=E;i++) printf " %s.dat",i}' S=0 E=40| sh > all.dat
죄송 <, > 처음 알았다는 -_-.
echo a|awk '{printf "cat ";for(i=S;i<=E;i++) printf " %s.dat",i}' S=0 E=40| sh > all.dat
환장 -_-/
echo a|awk '{printf "cat ";for(i=S;i<=E;i++) printf " %s.dat",i}' S=0 E=40| sh > all.dat
<code> ... </code>
<code> ... </code> 태그를 쓰시면 됩니다
저장 회수가 1000번이
저장 회수가 1000번이 넘어가면 ">>" 의 효율이 급격히 떨어지기 시작합니다.
이경우에는 파일 핸들을 열어놓고 계속 쓰는 방법을 강구해야 하지요.
댓글 달기