grep 결과에서 숫자 추가


23

다음 명령을 실행합니다.

grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}'

그리고 나는 다음과 같은 결과를 얻습니다.

1
4
0
8

각 카운트를 누적 카운트 변수까지 추가하고 싶습니다. 누군가 내가 나를 도울 수있는 마술 하나의 라이너가 있습니까?

답변:


31
grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }'

그것은 목록을 인쇄하지 않지만 합계를 인쇄합니다. 목록과 합계를 모두 원한다면 다음을 수행하십시오.

grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1; print $1} END { print SUM }'

숀-답변 주셔서 감사합니다. awk에서 bash 스크립트로 total을 어떻게 다시 반환합니까?
Amir Afghani

2
@Amir 다음과 같이 첫 번째를 사용할 것입니다. variable=$(grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }')이것은 명령의 출력 (합계 값만)을 변수라는 변수에 넣습니다variable
Shawn J. Goff

3
@Amir Afghani 또한 grep을로 변경할 수도 있습니다 "[0-9]\+ errors". > 9 오류를보고하는 회선이있는 경우 일치합니다.
Shawn J. Goff

그래, 와우, 내가 그것을 놓쳤다는 것을 믿을 수 없다. 고맙습니다.
Amir Afghani

숀, 결과가 내 결과를 합치 지 않는 것 같습니다. 다음과 같습니다 : 총 오류 = + 259 + 7581 + 8852 + 2014 + 3189 ++ 13572 + 11438 +++ 6 + 4172 +
Amir Afghani

8

이것은 모두 awk로 수행 할 수 있습니다.

awk '"[0-9]+ errors" {sum += $1}; END {print sum}' verification_report_3.txt

6

GNU 시스템을 사용하고있는 것 같습니다 . 따라서 Perl 정규 표현식 지원이 가능하면 다음과 같이 작성할 수 있습니다.

grep -Po '[0-9]+(?=\s+errors)' infile | 
  paste -sd+ | 
    bc

추신 : 나는 숫자> 9를 허용하도록 정규식을 수정했습니다 (+ 수량 자 추가).

추신 : 또는 awk이면 충분합니다 ( GNU awk 가정 ).

awk 'END { print s }
/[0-9]+[[:space:]]+errors/ { 
  s += $1 
  }' infile

나를 위해 첫 번째 것은 이미 파이프에 들어간 것을 인쇄합니다 ...
Xerus

3

grep의 출력을 파이프에 연결하십시오

awk 'BEGIN {total=0;}{total+=$1;}END {print "Total: ",total}'

2

나는 이것을 사용한다 :

$ echo $(cat file | sed 's/$/+/') 0 | bc

큰 목록에는 효율적이지 않지만 대부분의 유스 케이스에는 좋습니다. 일반적으로 프로세스를 자동화하기 위해 쉘 함수를 사용하므로 파일 이름 만 제공하면됩니다.

## cheezy summation
##   call from .bashrc
##
getsum () { echo $(cat $1 | sed 's/$/+/') 0 | bc; }
gethsum () { echo $(cat $1 | sed 's/[gG]/*1000M/' | sed 's/[mM]/*1000K/' | sed 's/[kK]/*1000/' | sed 's/$/+/') 0 | bc; }
gethexsum () { echo ibase=16 $(cat $1 | sed 's/$/+/') 0 | bc; }

데이터가 다른 방식으로 구분 된 경우 특정 요소 구분 기호 나 문자 클래스를 줄 끝 마커로 대체 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.