문제

저는 Bash에서 간단한 스크립트를 작성하고 실시간으로 일부 로그를 분석하고 사실에 접근하는 방법에 대해 궁금해합니다. 몇 초마다 이전 시간을 읽은 파일에서 장소를 찾아야합니다. 지금 당장 나는 이렇게하고 있습니다 :

LOG_FILE=path_to_file
DELAY=1   #time between refresh
LINES=100 #lines to read at one cycle

LAST=$(tail -n 1 $LOG_FILE)      

IFS=$'\n'
while true;
do
    clear;
    found=0
    LOG=$(tail -n $LINES $LOG_FILE)
    for line in $LOG
    do
        if [ $line = $LAST ]; then 
            found=1
            continue
        fi        
        if [ $found = 0 ]; then
            continue
        fi
        #Analyzing counting nd stuff.
        echo "$stuff"
    done
    LAST=$line
    sleep $DELAY;
done
.

그래서 모든 사이클 파일의 끝에서 몇 가지 줄을 가져 와서 이전 실행의 마지막 실행 중 하나를 찾고 있습니다.정의 된 수의 줄 수가 추가 될 때까지 한 번의 순환이 될 때까지 이것은 꽤 잘 작동합니다.나는 항상 LINES=10000와 같은 것을 말할 수 있지만이 경우 쓸모없는 unsand는 이전 실행에서 마지막 줄을 발견했는지 확인하기 위해 쓸모없는 실행이 있습니다. 나는 내가 더 효율적으로 다소 효율적으로 할 수 있는지 궁금합니다.

도움이 되었습니까?

해결책

나는 당신이 그렇게 sth를 찾고 있다고 생각합니다 :

#!/bin/bash
GAP=10     #How long to wait
LOGFILE=$1 #File to log to

if [ "$#" -ne "1" ]; then
    echo "USAGE: `basename $0` <file with absolute path>"
    exit 1
fi


#Get current long of the file
len=`wc -l $LOGFILE | awk '{ print $1 }'`
echo "Current size is $len lines."

while :
do
    if [ -N $LOGFILE ]; then
        echo "`date`: New Entries in $LOGFILE: "
        newlen=`wc -l $LOGFILE | awk ' { print $1 }'`
        newlines=`expr $newlen - $len`
        tail -$newlines $LOGFILE
        len=$newlen
    fi
sleep $GAP
done
exit 0
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top