로그 파일의 레코드 수

로그 파일의 레코드 수

output.log다음 내용이 포함된 파일이 있습니다 .

Thread started
Thread finished
Thread started
Thread finished
Thread started
Thread started

다음을 사용하여 출력을 모니터링합니다.

tail -f output.log

현재 실행 중인 스레드 수를 기록하는 명령을 작성하고 싶습니다. 위의 경우 출력은 다음과 같습니다.

2 threads are running

grep을 사용하고 어떻게든 문자열 인스턴스를 기록해야 합니까?

답변1

계산에 사용할 수 있습니다 awk. 그러나 더 복잡한 것이 없다면 다음을 사용할 수 있습니다.

tail -f output.log | awk '/Thread started/{n++}/Thread finished/{n--} END { printf ("%d Threads are running\n", n)}' output.log

더 나은 방법은 watch다음과 같이 사용하는 것입니다.

watch -n.2 -x awk '/Thread started/{n++}/Thread finished/{n--} END { printf ("%d Threads are running\n", n)}' output.log

화면 상단에 나타나는 모든 항목이 -n.2새로 고쳐집니다 .0.2s

답변2

다음 bash스크립트를 시도해 볼 수 있습니다.

#!/bin/bash
start_count=$(grep -c "started" /path/to/output.log)
finish_count=$(grep -c "finished" /path/to/output.log)
echo "$((start_count - finish_count)) threads are running"

이는 인쇄 가능 범위 밖에 있는 이전에 실행 중인 스레드를 모두 고려합니다 tail -f. 여기서는 파일에서 "시작됨" 및 "완료됨"이 나타나는 횟수를 계산하고 간단히 이 값을 빼서 결과를 얻습니다. tail -30 /path/to/output.log전체 파일 대신 읽을 줄 범위(예: )를 선택하고 해당 줄을 기준으로 결과를 찾으려는 경우 .

답변3

이 스크립트를 실행해 보세요.

a=$(grep started output.log | wc -l)

b=$(grep finished output.log | wc -l)

echo Total Running threads: "$[$a-$b]"

Bash 스크립트를 생성하고 위의 줄을 붙여넣습니다. 스레드가 실행되게 됩니다.

관련 정보