다른 단어에서 시작하는 단어의 인스턴스 수를 계산하는 방법

다른 단어에서 시작하는 단어의 인스턴스 수를 계산하는 방법

grep오늘부터 다음 형식의 MySQL 오류 로그가 필요합니다 .

`date +"%y%m%d"` (140710) 

해당 단어의 모든 인스턴스를 찾습니다 partitioned.

나는 다양한 방법을 시도했지만 아무 소용이 없었습니다. 이것은 작동하는 것 같습니다:

more +/"`date +"%y%m%d"`" mysql-error.log | grep -c partitioned

그러나 로그 파일에 오늘 항목이 포함되어 있지 않으면 0을 반환하는 대신 전체 파일을 검색하여 전체 파일의 번호를 반환합니다.

오늘 항목이 없으면 전체 파일이 아닌 grep0을 반환하고 결과를 계산해야 합니다 .

sed이 작업 을 수행하는 더 좋은 방법이 있습니까 awk?


기술적으로 계산해야 할 내용 } partitioned {뒤에는 영숫자 문자열 })이 옵니다. 분할된 {(문자열 없음)}이 있을 수 있으므로 계산해서는 안 되기 때문입니다.

그러나 이는 엄격한 요구 사항은 아닙니다. 나는 단어의 발생 횟수를 세는 것만으로도 행복합니다 partitioned.

다음은 로그 파일의 예입니다.

140109 12:25:07 [Note] WSREP: view(view_id(PRIM,c4819ddf-7952-11e3-89fc-4f9f1bfa267f,3) memb {
    c4819ddf-7952-11e3-89fc-4f9f1bfa267f,
} joined {
} left {
} partitioned {
    f85c2e70-7952-11e3-a759-aa8332246e85,
})
140109 12:25:07 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 85)

답변1

GNU sedanhd 를 사용하면 grep다음을 시도해 볼 수 있습니다.

sed -n "/$(date +%y%m%d)/,\$p" file | grep -c partitioned

/pattern/,$첫 번째 패턴을 파일의 끝과 일치시킵니다.

귀하의 의견을 바탕으로:

$ sed -n "/$(date +%y%m%d)/,\$p" 1.txt | grep -c partitioned
1

일치하는 날짜가 없습니다:

$ sed -n "/$(date +%y%m%d)/,\$p" 1.txt | grep -c partitioned
0

답변2

두 개의 grep을 함께 연결해 볼 수 있습니다.

grep `date +"%y%m%d"` mysql-error.log | grep -c partitioned

아니면 더 간단합니다:

grep -c "`date +%y%m%d`.*partitioned" mysql-error.log

편집하다

날짜와 "partitioned"라는 단어가 다른 줄에 있으므로:

d=$(date +"%y%m%d"); awk '/'$d'/,EOF {print $0}' mysql-error.log | grep -c partitioned

또는:

awk '/'$(date +%y%m%d)'/,EOF {print $0}' mysql-error.log | grep -c partitioned

관련 정보