grep 결과의 합

grep 결과의 합

일정 기간 동안 grep 결과의 합계를 출력해야 합니다. 지금은 grep 시간을 하드코딩했지만 도움을 주시면 매우 감사하겠습니다. 문제는 결과를 스크립트에 출력할 수 없다는 것입니다.

이 줄을 사용하면 출력 1이 제공됩니다.

cat *.log | egrep '2011-07-01 (04:[0][0-9]:[0-5][1-9]|04:10:00)' * | grep -ach '0110 478655 .. 51' | awk '{SUM += $1} END { print SUM }'

이 줄은 출력 0을 제공합니다. cat *.log | egrep '2011-07-01 (04:[1][0-4]:[0-5][1-9]|04:15:00)' * | grep -ach '0110 478655 .. 51' | awk '{SUM += $1} END { print SUM }'

이 코드에는 많은 개선이 필요합니다.

while read line
do
cd $DIR
ta1=`cat *.log | egrep '2011-07-01 (04:[0][0-9]:[0-5][1-9]|04:10:00)' * | grep -ach '0110 478655 ..  51' | awk '{SUM += $1} END { print SUM }'`
ta2=`cat *.log | egrep '2011-07-01 (04:[1][0-4]:[0-5][1-9]|04:15:00)' * | grep -ach '0110 478655 ..  51' | awk '{SUM += $1} END { print SUM }'`
ta=$((ta1 + ta2))
echo -e "Results =  $ta "
done

결과를 추가하고 이를 while do 문에 넣고 싶습니다. 또한 15분 기간의 모든 인스턴스를 요약할 수 있도록 grep을 두 번 수행해야 합니다. , 대신 단일 grep 문을 실행하는 방법을 아시나요?

답변1

문제가 두 정규식 대신 하나의 정규식을 사용하여 grep을 15분 기간과 일치시키는 것이라면 다음과 같이 분석해 보십시오.

변화:

egrep '2011-07-01 (04:[0][0-9]:[0-5][1-9]|04:10:00)' 
egrep '2011-07-01 (04:[1][0-4]:[0-5][1-9]|04:15:00)'

도착하다:

egrep '2011-07-01 04:(0[0-9]|1[0-4]):[0-5][0-9]'

이는 00:00에 시작하여 14:59에 끝나는 15분 블록과 일치해야 합니다. 다음 세 블록에는 다음을 사용하십시오.

# 15:00 to 29:59
egrep '2011-07-01 04:(1[5-9]|2[0-9]):[0-5][0-9]'

# 30:00 to 44:59
egrep '2011-07-01 04:(3[0-9]|4[0-4]):[0-5][0-9]'

# 45:00 to 59:59
egrep '2011-07-01 04:(4[5-9]|5[0-9]):[0-5][0-9]'

관련 정보