![테일 교체 파일](https://linux55.com/image/119416/%ED%85%8C%EC%9D%BC%20%EA%B5%90%EC%B2%B4%20%ED%8C%8C%EC%9D%BC.png)
매초마다 추가되는 데이터를 보면서 파일을 추가하고 나중에 처리할 새 파일로 데이터를 전송하려고 합니다. 사용
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
및 사이에 파이프를 추가하면 여전히 도움이 될 수 있습니다.tail
awk