Linux 특정 날짜 및 타임스탬프를 기반으로 특정 단어가 나타나는 텍스트 파일의 줄 수를 계산합니다.

Linux 특정 날짜 및 타임스탬프를 기반으로 특정 단어가 나타나는 텍스트 파일의 줄 수를 계산합니다.

특정 날짜 및 시간을 기준으로 -> [com.java.Name abc] <-라는 단어가 포함된 텍스트 파일의 줄 수를 계산하는 방법

아래에서 시도했지만 값이 1만 표시됩니다. 4줄을 예상합니다. 단어 수가 아니라 줄 수를 기준으로 해야 합니다. 날짜와 시간을 어떻게 언급하나요?

grep -c '[com.java.Name abc]' server.log | wc -l

아래는 샘플 파일입니다

2020-06-14 13:46:10,442 INFO  [com.java.Name abc] [com.java.Name abc]
2020-06-14 13:46:20,420 INFO  [com.java.Name abc]
2020-06-14 13:47:14,410 INFO  [com.java.Name abc]
2020-06-14 13:48:12,442 INFO  [com.java.Name abc]

답변1

grep -c옵션은 이미 계산되었습니다. 결과 grep는 숫자입니다. 그러면 wc당연히 단 하나의 행만 검색됩니다. 그냥 완전히 삭제하세요 wc.

답변2

[접근 방식의 문제점은 및 가 포함된 패턴을 찾고 있다는 것입니다 ]. 이는 정규식에서 특별한 의미를 갖습니다. 즉, "문자 목록"이고 그 안에 포함된 모든 문자와 일치한다는 것입니다. 그러니 수행해라

grep '[com.java.Name abc]' logfile

행에서의 위치에 관계없이 문자 a, b, c, e, j, m, o, v, N공백 및 마침표를 포함하는 모든 행과 일치합니다 (로그 파일의 모든 행과 일치할 수 있음)..

탈출 [해서 ]좋아 해야지

grep -c '\[com.java.Name abc\]' logfile

또는 @terdon이 지적했듯이 이 -F플래그를 사용하십시오.

grep -c -F '[com.java.Name abc]' logfile

특정 날짜에 발생한 이벤트를 찾으려면 특정 메커니즘에 따라 다릅니다. 만약 당신이 그날을 안다면 다음 2020-06-14과 같이 간단하게 말할 수 있을 것입니다.

grep -c '^2020-06-14.*\[com.java.Name abc\]' logfile

완전한 타임스탬프를 기준으로 검색하고 싶다면, 알고 있는 경우에만정밀한아래와 같이 형식화된 로그 파일의 순간

grep -c '^2020-06-14 13:48:12,442.*\[com.java.Name abc\]' logfile

처음에 발생 횟수를 계산할 필요가 없기 때문에 이는 가능성이 낮습니다. 이 경우 아래 답변 중 일부를 적용해 볼 수 있습니다.

관련 정보