변경된 파일을 주기적으로 필터링하고 필터링된 출력을 새 파일로 리디렉션

변경된 파일을 주기적으로 필터링하고 필터링된 출력을 새 파일로 리디렉션

내가 가지고 있다고 가정하자log.txt

log.txt의 샘플 형식은 다음과 같습니다. Code Data Timestamp

...
C:57 hello 1644498429
C:56 world 1644498430
C:57 water 1644498433
...

문자열이 포함된 행을 필터링하려면 C:57다음과 같이 할 수 있습니다 .

cat log.txt | grep C:57

그런 다음 출력을 새 파일로 리디렉션합니다.

cat log.txt | grep C:57 > filtered_log.txt

그러나 log.txt에 새로운 변경 사항이 있으면 명령을 다시 반복해야 합니다. 파일에 새로운 변경 사항이 있을 때마다 또는 문자열이 포함된 새 줄이 있을 때만 주기적으로 실행되기를 원합니다 C:57.

답변1

다음과 같이 사용할 수 있습니다 tail -f.

tail -f log.txt|grep C:57 >> filtered_log.txt

log.txt이렇게 하면 태그를 지속적으로 파악 C:57하고 일치하는 항목을 filtered.log.txt.

cat로그를 읽고 이를 파이프하는 데 사용하는 것은 grep쓸모가 없습니다 cat. grep파일을 직접 읽을 수 있습니다. a 와 a 를 결합하면 catI/O가 낭비됩니다 grep.

여기서 한 가지 단점은 필터링된 출력이 버퍼링으로 인해 지연될 수 있다는 것입니다. 이는 다음과 같은 방법으로 피할 수 있습니다.

tail -f log.txt|grep --line-buffered C:57 >> filtered_log.txt

또는 다음 stdbuf -o0명령을 사용하십시오.

 tail -f log.txt|stdbuf -o0|grep C:57 >> filtered_log.txt C:57

관련 정보