다음 명령을 실행합니다.
grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}'
그리고 나는 다음과 같은 결과를 얻습니다.
1
4
0
8
각 숫자를 누적 카운트 변수까지 추가하고 싶습니다. 누군가 내가 나를 도울 수있는 마술 하나의 라이너가 있습니까?
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로 수행 할 수 있습니다.
awk '"[0-9]+ errors" {sum += $1}; END {print sum}' verification_report_3.txt
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
나는 이것을 사용한다 :
$ 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; }
데이터가 다른 방식으로 구분 된 경우 특정 요소 구분 기호 또는 문자 클래스를 줄 끝 마커로 대체 할 수 있습니다.
Grep의 출력을 파이프에 연결하십시오
awk 'BEGIN {total=0;}{total+=$1;}END {print "Total: ",total}'