[완료] 각 행마다 숫자로 이루어진 파일이 있는데, 각 행들의 합을 얻고 싶습니다.
      글쓴이: 자일자일 / 작성시간: 수, 2008/07/09 - 10:30오후    
  
  안녕하세요.
이용하는 서버중에... 쉘을 실행하면 각 서버의 프로세스의 갯수를 세서 출력을 해주는것이 있습니다.
예로..
#1.sh 하고 나면
82
95
19
28
49
#
이런식이에요. 이렇게 각각의 수는 쉽게 얻을 수 있는데.. 이들의 합을 얻고자 하는데 어찌하면 좋을지.. 도움 부탁드려요.
일단 #1.sh > list.txt 이렇게 파일로 만들고 나서 리스팅된 숫자들의 합을 얻으면 될듯한데 쉘 프로그래밍을 안해봐서요.
도움 부탁드립니다..~
Forums: 


아. perl 빨리 공부해야하는데 일단은..^^;
#/bin/bash sum=0 for x in `cat list.txt` ; do let "sum = sum + x" done echo "$sum"Hello World.
감사합니다.
완벽하네요..^^
이런 방법도...
awk '{sum += $1} END {print sum}' list.txt
awk의 활용범위도 끝이 없는듯합니다.
열심히 배워야겠지요
감사합니다.
lex & yacc
Makefile
CC = gcc -m32 FLEX = flex BISON = bison CFLAGS = -g -W -Wall DEBUG = -DYYERROR_VERBOSE INCLUDE = -I./ EXE = count.exe all: flex bison $(EXE) flex : $(FLEX) -Pyy test.l bison : $(BISON) -d -v -g test.y -o y.tab.c $(EXE) : -@$(CC) -o $(EXE) lex.yy.c y.tab.c $(CFLAGS) $(INCLUDE) $(DEBUG) clean: -@rm -rf $(EXE) lex.yy.c y.tab.c y.tab.h y.output y.vcg core.*test.l
%{ #include <string.h> #include "y.tab.h" %} INTEGER [0-9]+ NEWLINE [ \n\t]+ %% {NEWLINE} { /* empty */ } {INTEGER} { yylval.integer = atoi( yytext ); return INTEGER; } . { /* error */ } %% int yywrap( void ) { return 1; }test.y
%{ #include <stdio.h> extern FILE* yyin; static int total = 0; %} %union { int integer; } %token <integer>INTEGER %start expr %% expr : /* empty */ | INTEGER expr { total += $1; } ; %% int main ( int argc, char* argv[] ) { yyin = stdin; yyparse(); printf ( "total : %d\n", total ); return 0; } int yyerror( const char* s ) { perror( s ); return (0); }Hello World.
bc를 쓰면
1.sh | xargs echo | tr ' ' '+' | bc
결과물을, 한 줄로 만든 다음, 더하기 기호를 넣고, bc에 넘겨서 값을 얻습니다.
댓글 달기