[완료] 쉘스크립트에서 화일 append하는 커맨드?

mack97의 이미지

안녕하세요.

쉘스크립트를 이용해서 화일 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

그럼 좋은 하루 되세요.

나빌레라의 이미지

set inum = 0
set tnum = 40
set lnum = 1
 
while ( $lnum )
 
cat ${inum}.dat >> all.dat
 
 
if ( $inum == $tnum ) set lnum = 0
@ inum += 1

해보세요.. 약간은 빨라질지도..
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

cmoh1110의 이미지

cat *.dat > all.dat

물론 *.dat 는 input들만 있고, all.dat 는 처음에 없다고 가정하고..

jg의 이미지

주어진 파일이 알파벳 순서가 아니기 때문에 이 방법은 문제가 있습니다.
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}

Prentice의 이미지

rm new.dat && for I in `seq 0 40` ; do cat $I.dat >> new.dat ; done

jg의 이미지

cat `seq -f'%g.dat' 0 40` > new.dat

흠.. 파일이 많지 않다면 이 방법은 어떨까요.

$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}

slc1의 이미지

seq 명령 오늘 처음 봤네요 -_-..
고거 참 좋군요..sequence 에는 왔다네요..

혹시 이거 POSIX에 포함되어 있는 명령어인지??
아님 GNU tool에만 있는건지??

jg의 이미지

본래 sh에 C의 for문과 같은 방법이 없기 때문에
unix 계열에서 자주 쓰이는 명령어로 오래전 부터 있는 명령어입니다.
이것은 검은해*님이 예를 보여주셨구요.

뭐.. bash에는

for ((j=0; j < 41; ++j)); do echo "$j.dat"; done

과 같이 사용할 수 있는 확장이 있긴합니다만
일반 본쉘을 쓴다고 가정하는 범용 스크립트에서는 유용하지 못합니다.

현재 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}

ganadist의 이미지

http://www.unix.org.ua/orelly/unix/upt/ch45_11.htm

(차마 이름을 적지는 못하겠... =33 )

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

slc1의 이미지

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

slc1의 이미지

echo a|awk '{printf "cat ";for(i=S;i<=E;i++) printf " %s.dat",i}' S=0 E=40| sh &gt all.dat

slc1의 이미지

echo a|awk '{printf "cat ";for(i=S;i<=E;i++) printf " %s.dat",i}' S=0 E=40| sh > all.dat

slc1의 이미지

echo a|awk '{printf "cat ";for(i=S;i<=E;i++) printf " %s.dat",i}' S=0 E=40| sh > all.dat

pung96의 이미지

<code> ... </code> 태그를 쓰시면 됩니다

pung96의 이미지

저장 회수가 1000번이 넘어가면 ">>" 의 효율이 급격히 떨어지기 시작합니다.
이경우에는 파일 핸들을 열어놓고 계속 쓰는 방법을 강구해야 하지요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.