테일 교체 파일

테일 교체 파일

매초마다 추가되는 데이터를 보면서 파일을 추가하고 나중에 처리할 새 파일로 데이터를 전송하려고 합니다. 사용

tail -f 'data file' >> 'destination file'

그런데 몇 줄이 반복되서 이렇게 합니다.

tail -f 'data file' | awk '!seen[$0]++' | >> 'destination file'

괜찮아 보이지만 행은 일정 기간에 걸쳐 분할되므로 이를 달성하려면 전체 행을 버퍼링해야 할 것 같습니다. 하지만 이것이 좋은 접근 방식입니까, 아니면 다른 방법으로 수행해야 합니까?

tail -f 'data file' | grep --line-buffered -E '^.*$' | awk '!seen[$0++]'

완전한 데이터 예시

[9/10/17 14:21:09] Data=[xxx|yyy|zzz] 

분할 예

[9/1
[9/10/17 14:21:09] Data=[xx 

이 같은. 에서 으로 데이터를 전송한 후에 tail이런 일이 발생합니다 awk. 그래서 grep명령의 끝까지 가서 작동했습니다. 그러나 데이터가 너무 작으면 데이터가 버퍼에 남아 있게 됩니다.

tail -f 'data file' | awk '!seen[$0++]' | grep --line-buffered -E '^.*$'

귀하의 조언과 답변에 감사드립니다!

답변1

근데 몇몇줄이 중복되네

중복 항목이 인접한 행인 경우 다음을 시도해 볼 수 있습니다 uniq.

$ tail -f <file> | uniq

빠른 테스트에서는 출력을 쓰기 전에 전체 줄을 기다리면서 예상대로 작동했습니다.

중복된 줄이 파일 전체에 흩어져 있는 경우 uniq및 사이에 파이프를 추가하면 여전히 도움이 될 수 있습니다.tailawk

관련 정보