[완료] 여러개의 텍스트파일이 하나로 합쳐있을 때, 각 파일의 구분자를 이용해서 각 파일별 합 구하기

sayhappy의 이미지

안녕하세요.

질문 제목이 좀 복잡하네요.
실상은 아래처럼 파일 내용이 '===...==='로 구분이 되어 있는 상태입니다.
이 때 '===...==='로 구분되어 있는 각 부분의 오른쪽 끝 컬럼의 숫자의 합을 구하려고 합니다.
전체 합이 아니라 '====...===='로 구분된 부분 마다의 오른쪽 끝 컬럼의 합을 구하고 싶은 것입니다.
awk로 어떻게 해보려고 했는데, 잘 안되네요. RS나 FS로는 어떻게 할 수가 없더라구요.
결국 노가다로 하긴했는데, 이런 경우 어떻게 하는것이 좋을까요?

...
7546373 16      164023/164391   0       368
5442877 16      167459/167855   0       396
7206581 16      335903/336270   0       367
7072309 24      169715/170159   0       444
4393637 16      290799/291169   0       370
=============================================
3942405 8       291065/292186   0       1121
4142629 8       292223/292490   0       267
3888845 8       292513/292817   0       304
4387149 8       292876/293179   0       303
6772517 8       293199/293541   0       342
6779557 8       293560/293828   0       268
...
=============================================
...
keedi의 이미지

굳이 한줄로 해결해야 하는 압박이 없으시다면...

#!/usr/bin/perl 
 
use strict;
use warnings;
use Tie::File;
 
tie my @lines, 'Tie::File', "data.txt"
    or die "cannot open file";
 
my $sum = 0;
 
LOOP_LINES:
for my $i ( 0 .. $#lines ) {
 
    if ( $lines[$i] =~ / ^ =+ $ /xms ) {
        print "$sum\n";
        $sum = 0;
        next LOOP_LINES;
    }
 
    $sum += ( split " ", $lines[$i] )[4];
    print "$sum\n" if $i == $#lines;
}
 
untie @lines;

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Keedi Kim

----
use perl;

Keedi Kim

pung96의 이미지

저도 keedi님의 코드를 추천합니다만 굳이 한줄로 하셔야 한다면

 perl -anle'/^[=\s]+$/ and $i++ or $a[$i]+=$F[-1];END{for(@a){print;}}' input.txt

혹은
perl -anle'/^[=\s]+$/ and print $a[$i++] or $a[$i]+=$F[-1]' input.txt

굳이 한줄로 하셔야 한다면!!

참고로 이 코드가 지저분 하기는 하지만 펄이기 때문이 아니라 한줄이기 때문이라는 점을 강조하고 싶습니다.^^

추가: 코드에서 몇가지 수정했습니다.

pung96의 이미지

오오. 펄코드를 보시고 완료로 바꾸셨군요. 이리로 오세요~~ 이리이리~~

doodoo의 이미지

아...대단....하네요...나는 언제나...ㅠㅜ

무한포옹의 이미지

awk -v sum=0 '{ if ($0 ~ /^=/) { print sum ; sum=0 } sum+=$5 ;print $5,sum}' test.txt

-------------------------------
인생 뭐 있음!

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

doodoo의 이미지

감사합니다...
사실은 df 한 결과를 모두 합할려고 하다가 awk 로 어떻게든 될것 같았는데...
질문을 쓸려고 하다가..이 글을 보고 해결했네요..^____^;

df | awk -v sum=0 '{ if ( $1 ~ /sd/ ) {sum += $2 ; print $2, sum}}'
df | awk -v sum=0 '{ if ( $1 ~ /\/dev\/sd/ )  sum += $2 } END { print sum }'

참고로 답은 1989966788 이렇게 나오네요..ㅎㅎㅎㅎ

결론은 하드 자랑이었습니다. ^^;

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.