
일정 기간 동안 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]'