빠른 방법은 awk
입니다.
가정 테스트 출력은 test.out
라는 파일에 있습니다
#!/bin/bash
npasses=$(<test.out awk '
/PASSED/{ total += $4 }
END { print total }')
echo number of passing tests: $npasses
<test.out
는 awk
가 test.out
에서 읽는 것을 의미한다.
/ PASSED/{ total += $4 }
은 총계라는 변수에 네 번째 필드를 추가하지만 정규식 PASSED
과 일치하는 줄만 추가합니다.
END { print total }
은 파일 끝에서 실행되며 total
에 저장된 값을 인쇄합니다. 로그 파일에있는 경우, 당신은하지 마십시오 파이프의 출력을 다른 프로세스에서 직접 읽으려면
regex='\[ (PASSED|FAILED) \] (\d+) tests.'
while read -r line; do
[[ $line =~ $regex ]] || continue
count=${BASH_REMATCH[2]}
case ${BASH_REMATCH[1]} in
PASSED) let passed += count ;;
FAILED) let failed += count ;;
esac
done < input.txt
를 사용
done < <(sourcecommand)
과 마지막 줄을 대체 할 수
당신은 awk''보길 원하는 것입니다. –
'case' 문을 사용하십시오. – Barmar
제목에'bash :'라고 써 있습니다. 왜 '배쉬'에서 이것을하고 싶습니까? 작은 awk 스크립트를 작성하고 awk 스크립트의 출력을 bash 변수에 저장하는 것이 더 쉬워 보입니다. – Mikel